Python3: os.system 不重定向标准输出

Python3: os.system not redirecting stdout

如题所述。我的代码中有这个:

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

谢谢。

我认为那是因为您正在尝试使用系统命令而不是 Bash 支持这些 I/O 重定向标志。

shell=True https://docs.python.org/2/library/subprocess.html#subprocess.call

试试这个

我不确定为什么,但似乎 os.system 使用的是 Dash(Ubuntu 的默认脚本 shell),而不是 Bash,所以&> 不受支持。相反发生的是命令在后台运行,文件被截断。即 command &> filename 等同于 command &; > filename.

要修复它,您可以简单地使用等效的重定向,> filename 2>&1