我正在为论文研究编写一个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)
有什么想法吗?
任何帮助将不胜感激!
提前致谢!
答案 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)