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

Python3:os.system未重定向标准输出,python,python-3.x,python-3.7,os.system,Python,Python 3.x,Python 3.7,Os.system,如标题所述。我的代码中有: os.system("./vpr/vpr " + config + " " + file_name + " --seed " + str(seed) + " &> " + str(bench_name) + "-" + str(seed) + ".stdout") 它有很多变量,但它的计算结果是这样的(我肯定知道,因为我在os.system行前面有一个print语句): 该命令实际上运行良好,但重定向不正常!文件clma-0.stdout被创建,但仍然

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

os.system("./vpr/vpr " + config + " " + file_name + " --seed " + str(seed) + " &> " + str(bench_name) + "-" + str(seed) + ".stdout")
它有很多变量,但它的计算结果是这样的(我肯定知道,因为我在
os.system
行前面有一个print语句):

该命令实际上运行良好,但重定向不正常!文件
clma-0.stdout
被创建,但仍然是空的,我仍然在终端上获取整个stdout

解决这个问题的办法是什么?我做错了什么? 我正在Ubuntu 19.10上使用python-3.7


谢谢。

我认为这是因为您试图使用系统命令,而不是支持这些I/O重定向标志的Bash来完成


shell=True

试试这个,我不知道确切的原因,但似乎
os.system
使用的是Dash(Ubuntu的默认脚本shell),而不是Bash,因此不支持
&>
。相反,发生的情况是命令是后台的,文件被截断。也就是说,
command&>filename
相当于
command&>文件名


要修复它,您只需使用等效的重定向,
>filename 2>&1

@DYZ实际上它将stdout和stderr重定向到该文件。是的,您是对的。除此之外,如果您将stdout和stderr重定向到该文件,为什么该文件名为
.stdout
?这是因为vpr程序实际上没有使用stderr。我有一个习惯,不管怎样,我都会将两者重定向到同一个文件。没有什么好理由,真的。
./vpr/vpr vpr/k6_N10_40nm.xml vpr/blif/clma.blif --seed 0 &> clma-0.stdout