【问题标题】:Python3: os.system not redirecting stdoutPython3:os.system 不重定向标准输出
【发布时间】:2019-12-15 00:59:36
【问题描述】:

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

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 实际上它会将 stdout 和 stderr 都重定向到文件。
  • 是的,你是对的。
  • 题外话,但是如果您将stdout stderr 重定向到它,为什么文件名为.stdout
  • 这是因为vpr程序实际上并没有使用stderr。而且我有这种将两者都重定向到同一个文件的习惯。真的没有充分的理由。

标签: python python-3.x python-3.7 os.system


【解决方案1】:

我不知道究竟是为什么,但似乎os.system 使用的是 Dash(Ubuntu 的默认脚本 shell),而不是 Bash,所以不支持 &>。取而代之的是命令被后台处理,并且文件被截断。即command &> filename 等价于command &; > filename

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

【讨论】:

    【解决方案2】:

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

    shell=Truehttps://docs.python.org/2/library/subprocess.html#subprocess.call试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 2014-01-20
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多