您如何简单地更改 Python 脚本以捕获其自身及其子进程写入 stdout 的所有内容?

假设您有一个大脚本,它在许多地方写入标准输出,直接(使用 Python 功能,如或print())和间接通过启动写入标准输出的 es。loggingstdoutsubprocess

有没有一种简单的方法来捕获所有这些标准输出?

例如,如果您希望脚本在完成时发送一封包含所有输出的电子邮件。

“微不足道”是指恒定而不是线性代码更改。subrprocess否则,我相信您将不得不在每个调用中引入重定向参数(和一些累积逻辑) 。您可以通过重定向来捕获脚本本身的所有输出,但是对于所有调用,或者实际上您可能用于启动这些子进程的任何其他类型的代码sys.stdout,我没有看到类似的“包罗万象”的简单解决方案。subprocess

有没有这样的解决方案,或者必须使用一个运行脚本来调用这个 Python 脚本作为子进程并stdout从该子进程中捕获所有内容?


眼眸繁星
浏览 167回答 1
1回答

慕尼黑的夜晚无繁华

可能是这样做的最短方法,而不是特定于 python 的方法是使用os.dup2()例如:f = open('/tmp/OUT', 'w')os.dup2(f.fileno(), 1)f.close()它的作用是替换1通常是您的stdout. 使用文件描述符f(然后您可以关闭)。之后,所有写入stdout和写入/tmp/OUT. 这种重复是可继承的,子进程将 fd1写入同一个文件。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python