子进程结果通过shell而不是保存到文本文件中

时间:2015-11-26 13:45:04

标签: python shell subprocess

我正在为论文研究编写一个Python脚本,我遇到了子进程模块的问题。

脚本执行的是执行带有大量args的“perf”(这是一个简化版本):

cmd = 'sudo perf stat -C %s -I %s -x , -e "%s"' % (core_perf, interval, perf_event_text)

然后我将cmd拆分为args,让令牌发送到子进程:

final_cmd = cmd.split()

with open('output.txt', 'w') as outfile:
    subprocess.Popen(final_cmd, stdout=outfile)

问题是这很好用,但是输出是通过shell显示的,而不是保存到文件中。

如果我为“ls”这样做,它就像一个魅力:

with open('output.txt', 'w') as outfile:
    subprocess.Popen("ls", stdout=outfile)

有什么想法吗?

任何帮助将不胜感激!

提前致谢!

2 个答案:

答案 0 :(得分:3)

IResource project=null; try { problems=workspace.getRoot().findMarkers(IMarker.PROBLEM, true, depth); HttpClientExample hc= new HttpClientExample(); for (int i = 0; i < problems.length; i++) { MessageDialog.openInformation( window.getShell(), "FindMakers", "Hello,"+problems[i].getAttribute(IMarker.LOCATION)); } 并未使用perf stat作为其输出,stdout,许多启动命令并在其上进行报告的程序(例如stderr)也执行相同操作不要破坏已执行命令的输出。

所以在这种情况下,而不是time使用stdout=outfile

答案 1 :(得分:0)

另一个选项是将-o参数传递给perf,以便将stderr输出写入您指定的文件:

import shlex
import subprocess

cmd = shlex.split('perf stat -o outfile.txt ls')
subprocess.call(cmd)