【发布时间】:2015-03-04 12:01:28
【问题描述】:
我在 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 子进程执行它。
【问题讨论】:
-
你设置
shell=True了吗?没有它,您将尝试运行名为my command' | awk 'NR > 2 {...etc..的单个可执行文件 -
是的,shell=True 也试过了
-
你错过了
my command周围的开场白 -
您的样本
cmd在第一个|之前包含一个杂散的'单引号。此外,\n不会被转义。 -
你错过了 awk sn-p 上的尾随引号