为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

眼眸繁星 2022-06-07 19:48:47
假设您有一个大脚本,它在许多地方写入标准输出,直接(使用 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写入同一个文件。


查看完整回答
反对 回复 2022-06-07
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号