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

Python子进程不适用于复杂的linux命令,python,linux,awk,sed,Python,Linux,Awk,Sed,我在Linux中有一个命令,它提供以下输出: 1425463080:0.0000000000 E+00.0000000000 E+00 1425463085:0.0000000000 E+00 0.0000000000 E+00 1425463090:0.0000000000 E+00.0000000000 E+00 1425463095:0.0000000000 E+00 0.0000000000 E+00 为了使其更具可读性,我使用awk命令如下: my command | awk 'NR

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

1425463080:0.0000000000 E+00.0000000000 E+00
1425463085:0.0000000000 E+00 0.0000000000 E+00
1425463090:0.0000000000 E+00.0000000000 E+00
1425463095:0.0000000000 E+00 0.0000000000 E+00

为了使其更具可读性,我使用awk命令如下:

my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}'
my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}' | sed 's/://g'
现在要删除额外的,我使用sed如下:

my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}'
my command | awk 'NR > 2 {printf "%s %0.2f %0.2f\n", $1, $2, $3;}' | sed 's/://g'
通过此操作,我获得了以下预期输出:

1425463715 0.16 0.42
14254637200.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子进程执行它。

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

您是否设置了
shell=True
?如果不设置,您将尝试运行一个名为
my command'|awk'NR>2的可执行文件{…etc..
是的,也尝试使用shell=True。您的示例
cmd
在第一个
之前包含一个零散的
单引号。此外,
\n
没有转义。而且您缺少awk代码段的尾随引号