打印subprocess.run的输出并在屏幕上显示

时间:2020-07-25 05:44:23

标签: python python-3.x subprocess

我试图通过subprocess.run运行shell命令,我想将输出重定向到文件,但同时将其显示在stdout上。

我还没有找到一种方法,是否可以在纯Python脚本中实现?

这相当于用bash进行some_command | tee file.txt

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

1 个答案:

答案 0 :(得分:0)

您可以捕获输出并将其发送到stdout和文件。

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)