Python3: os.system无法重定向stdout

3
正如标题所述。我在我的代码中有以下内容:
os.system("./vpr/vpr " + config + " " + file_name + " --seed " + str(seed) + " &> " + str(bench_name) + "-" + str(seed) + ".stdout")

这个问题有很多变量,但它的最终结果非常简单(我确定这一点,因为在os.system代码行之前我有一个打印语句):

./vpr/vpr vpr/k6_N10_40nm.xml vpr/blif/clma.blif --seed 0 &> clma-0.stdout

实际上,命令运行得很好,但重定向却不起作用!文件clma-0.stdout会被创建但保持为空,并且我仍然在终端上看到整个标准输出。

有什么解决办法?我做错了什么吗? 我使用的是Ubuntu 19.10上的python-3.7

谢谢。


@DYZ 实际上它将标准输出和标准错误都重定向到文件中。 - mewais
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html - mewais
是的,你说得对。 - DYZ
不是重点,但如果你将stdout和stderr重定向到它,为什么文件被称为.stdout? - wjandrea
这是因为vpr程序实际上并没有使用stderr。而我有将两者重定向到同一文件的习惯。真的没有什么好的理由。 - mewais
2个回答

3

3

我不确定为什么,但似乎 os.system 使用的是 Dash(Ubuntu 的默认 Shell),而不是 Bash,所以不支持 &>。相反,该命令被后台处理,文件被截断。也就是说,command &> filename 等同于 command &; > filename

要解决这个问题,您可以简单地使用等效的重定向命令,> filename 2>&1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接