假设您有一个大脚本,它在许多地方写入标准输出,直接(使用 Python 功能,如或print())和间接通过启动写入标准输出的 es。loggingstdoutsubprocess有没有一种简单的方法来捕获所有这些标准输出?例如,如果您希望脚本在完成时发送一封包含所有输出的电子邮件。“微不足道”是指恒定而不是线性代码更改。subrprocess否则,我相信您将不得不在每个调用中引入重定向参数(和一些累积逻辑) 。您可以通过重定向来捕获脚本本身的所有输出,但是对于所有调用,或者实际上您可能用于启动这些子进程的任何其他类型的代码sys.stdout,我没有看到类似的“包罗万象”的简单解决方案。subprocess有没有这样的解决方案,或者必须使用一个运行脚本来调用这个 Python 脚本作为子进程并stdout从该子进程中捕获所有内容?
1 回答

慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
可能是这样做的最短方法,而不是特定于 python 的方法是使用os.dup2()例如:
f = open('/tmp/OUT', 'w')
os.dup2(f.fileno(), 1)
f.close()
它的作用是替换1通常是您的stdout. 使用文件描述符f(然后您可以关闭)。之后,所有写入stdout和写入/tmp/OUT. 这种重复是可继承的,子进程将 fd1写入同一个文件。
添加回答
举报
0/150
提交
取消