【问题标题】:Print output of subprocess.run AND display it on screen [duplicate]打印 subprocess.run 的输出并将其显示在屏幕上 [重复]
【发布时间】:2020-11-14 23:37:21
【问题描述】:

我正在尝试通过subprocess.run 运行一个shell 命令,我想将输出重定向到一个文件,但同时也将其显示在标准输出上。

我还没有找到方法,这可以在纯 Python 脚本中实现吗?

这相当于在 bash 中执行some_command | tee file.txt

我总是可以编写一个包装器 bash 脚本来调用 python 脚本并调用 tee,但如果 Python 有办法直接执行此操作会很好。

【问题讨论】:

  • 你有没有考虑过使用'subprocess.Popen()',而不是'subprocess.Communicate()'?
  • 是的,谢谢,我没找到。

标签: python python-3.x subprocess


【解决方案1】:

您可以捕获输出并发送到标准输出和文件。

Python 3.7+:

r = subprocess.run(cmds, capture_output=True, text=True)

Python 3.5+:

r = subprocess.run(cmds, stdout=PIPE, stderr=PIPE)
stdout = r.stdout.decode("utf-8") # specify encoding

例子

import subprocess
r = subprocess.run(['ls'], capture_output=True, text=True)
print(r.stdout)
with open('a.txt','w') as f:
    f.write(r.stdout)

【讨论】:

  • 如果我想在命令运行并产生输出时打印行,这不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2011-01-06
  • 2013-07-09
  • 2011-03-31
相关资源
最近更新 更多