Python3:操作系统未重定向标准输出

问题描述 投票:1回答:2

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

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

谢谢。

python python-3.x python-3.7 os.system
2个回答
1
投票

我不确定为什么会这样,但似乎os.system使用的是Dash(Ubuntu的默认脚本外壳),而不是Bash,因此不支持&>。而是将命令置于后台,并且文件被截断。也就是说,command &> filename等效于command &; > filename

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


1
投票

我认为这是因为您尝试使用系统命令来执行此操作,而不是使用支持这些I / O重定向标志的Bash。

[使用shell=True https://docs.python.org/2/library/subprocess.html#subprocess.call尝试这个

© www.soinside.com 2019 - 2024. All rights reserved.