【发布时间】:2014-04-09 10:21:47
【问题描述】:
)我已经确认我的 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 而不是子进程。
【问题讨论】:
-
你没有关闭
(是一个错字? -
"""将使其成为字符串,但不是原始字符串。r"""会变成 a raw string。 -
阿不思,一个错字。已修复,谢谢。
-
os.system()已被弃用,取而代之的是subprocess模块中的工具。即使您打算为此使用 awk,subprocess.Popen(['awk', '-F', awk_script], stdout=open('testout.txt', 'w'))也将是正确的选择——这将避免sh -c出现此错误,因为使用带有数组的subprocess.Popen()而没有 @987654332 @ 标志根本不涉及sh实例。 -
@Matt,回复:您最近的编辑,子进程模块是在 Python 2.4.3 中可用。