)我已经确认我的 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 而不是子进程。
最佳答案
为了您自己的理智,请尝试使用 pipes.quote
(如果 2.4 中不存在,则使用类似的东西)、' '.join(words)
和 '\n'.join(lines)
以便能够构建命令而不是使用单个复杂字符串(如果您有将它放入 Python 中)。更好的解决方案是调用类似 @kojiro suggested 的脚本.
看起来您正在做一些简单的 CSV 修改。如何检查 SO 以获取有关在 Python 中执行此操作的提示?
无论如何,一行400多个字符的awk
足以让任何人感到局促不安,而在已经具有出色的字符串处理功能的Python中这样做,只是将痛苦传递给下一个开发者。这会很生气。
关于python - 在 Python 中将 Linux 命令作为原始字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22230294/