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文件的内容:
成功!