Python 子进程输出重定向以后,部分内容会出现在父进程的控制台屏幕上

1.问题描述

父进程中使用multiprocessing.Process创建子进程,并在子进程中执行了

os.system("python task.py > run.log")

在task.py中抛出异常,被try except 结构捕获以后,print(traceback.print_exc())输出的内容全在父进程的控制台屏幕,而子进程的run.log日志文件里却没有,子进程中其他print内容都在run.log日志中

2.实验探索原因

实验代码:

命令行执行并重定向输出:

日志文件out.log的内容:

修改实验代码:

日志文件out.log的内容:

3.结论

traceback.print_exc() 本身不会返回任何信息,而是执行具体的打印动作,但是并不是打印到标准输出。因为print是输出到标准输出的,使用重定向符号>以后,print的内容输出到了out.log文件中,但是traceback.print_exc()打印的内容并没有输出到out.log文件。

4.试验如何重定向traceback.print_exc()打印的内容

试验代码:

命令行重定向标准错误到out.log文件中:

out.log文件的内容:

5.试验结果:

重定向标准错误,可将traceback.print_exc()输出的内容重定向到指定文件

6.尝试同时重定向标准输出和标准错误

实验代码:

命令行重定向标准输出和标准错误到out.log文件中:

查找原因:

试验第一种方式:

第一种方式没法将标准错误和标准输出重定向到同一个文件

试验第二种方式:

out.log文件的内容:

成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值