)我已经确认我的Linux命令在终端中有效,但是当我尝试从python中调用它时它会中断。
命令有点长并且有很多单引号,所以我将它包装在三个双引号(“”“)附近,因此python可以解释为原始字符串(或者我认为)。但是,当我运行它时我正在
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
但我有双重和三重检查我的单引号和双引号,我不知道从哪里去。
请参阅下面的测试脚本
import os
os.system("""awk -F ' *[[:alnum:]_]*: *' 'BEGIN {h="insert_job;box_name;command;owner;permission;condition;description;std_out_file;std_err_file;alarm_if_fail"; print h; n=split(h,F,/;/)} function pr() {if(F[1] in A) {for(i=1;i<=n;i++)printf "%s%s",A[F[i]],(i<n)?";":RS}} /insert_job/ {pr(); delete A} {for(i in F){if($0~"^"F[i])A[F[i]]=$2}} END {pr()}' ./output/JILS/B7443_dev_jil_20140306104313.csv > /trvapps/autosys/admin/EPS/output/JILS/testout.txt""")
仅供参考我使用的是Python 2.4.3,因此我使用的是os而不是subprocess。
答案 0 :(得分:2)
为了您自己的理智,请尝试使用pipes.quote
(或类似的内容,如果2.4中不存在),' '.join(words)
和'\n'.join(lines)
以便能够建立命令而不是如果 将它放在Python中,则使用单个复杂字符串。更好的解决方案是调用像@kojiro suggested这样的脚本。
看起来你正在做一些简单的CSV修改。如何检查SO以获取在Python中执行此操作的提示?
在任何情况下,单行上的400多个awk
字符足以让任何人感到不安,并且在已经具有出色字符串处理功能的Python中执行它只是将痛苦传递给下一个开发人员。哪个会很生气。
答案 1 :(得分:1)
将awk脚本塞进一条巨大的线路非常糟糕,几乎无法读取和维护。不要这样做 - 如果你真的必须使用awk(一个可疑的声明),请在多行上写出来,并使用适当的缩进,就像你可以使用任何其他脚本一样。
要修复sh -c
解释错误的错误,请使用subprocess
模块(传递参数数组和不设置shell=True
)而不是{{ 1}}。
os.system()