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
。
如题所述。我的代码中有这个:
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
。