Python子进程不适用于复杂的linux命令

时间:2015-03-04 12:01:28

标签: python linux awk sed

我在Linux中有一个命令,它给出了以下输出:

  

1425463080:0.0000000000e + 00 0.0000000000e + 00
  1425463085:0.0000000000e + 00 0.0000000000e + 00
  1425463090:0.0000000000e + 00 0.0000000000e + 00
  1425463095:0.0000000000e + 00 0.0000000000e + 00
  ...

为了使它更具人性化,我使用awk命令如下:

my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}'

现在要删除额外的,我使用sed如下:

my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}' | sed 's/://g'

有了这个,我按预期得到了以下输出:

  

1425463715 0.16 0.42
  1425463720 0.16 0.42
  1425463725 0.16 0.42
  ...

现在我想通过Python运行上面的命令。但是我在通过Python子进程模块运行时遇到了很多问题。例如,我面临以下错误:

  

('','awk:NR> 2 {printf“%s%0.2f%0.2f \ nawk:^ unterminated string \ n')

即使我将命令分配为:

cmd = """ my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;} """
subprocess.Popen(cmd, ...)

......但它仍无效。

如果我的Linux命令正确,请告诉我。如果是,那么我如何通过Python子进程执行它。

1 个答案:

答案 0 :(得分:3)

您需要转义\n转义序列; Python也解释了这一点;你也错过了awk命令中的结束'单引号:

cmd = """ 'my command' | awk 'NR > 2 {printf "%s %0.2f %0.2f\\n", $1, $2, $3;}' """

或使用原始字符串:

cmd = r""" 'my command' | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}' """

请注意,Python完全有能力完成这项工作,无需在中间使用额外的shell二进制来解释shell语法。