我在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:^未终止的字符串\ n')


即使我将命令分配为:

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


...仍然不起作用。

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

最佳答案

您需要转义\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语法。

08-04 02:14