首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么从Python2.7到3.7的迁移打破了我使用subprocess、Pool和stdout的日志记录?

从Python2.7到3.7的迁移打破了使用subprocess、Pool和stdout的日志记录的原因是因为在Python 3中,对于子进程和进程池的处理方式发生了一些变化,特别是在涉及到标准输出(stdout)的情况下。

在Python 2.7中,subprocess模块和multiprocessing模块的Pool类允许将子进程的输出重定向到父进程的标准输出(stdout)。这意味着可以通过捕获子进程的输出来记录日志。

然而,在Python 3中,为了改进子进程和进程池的行为,对于标准输出(stdout)的处理发生了变化。现在,子进程的输出不再直接重定向到父进程的标准输出(stdout),而是通过管道(pipe)传递给父进程。这意味着无法直接通过捕获标准输出来记录子进程的日志。

为了解决这个问题,可以使用新的logging模块来记录子进程的输出。可以通过创建一个新的日志处理器(logging handler),将子进程的输出传递给该处理器,并将处理器添加到日志记录器(logging logger)中。这样就可以将子进程的输出记录到日志文件中。

另外,对于进程池的情况,可以使用新的回调函数(callback function)来处理子进程的输出。在每个子进程完成任务后,可以通过回调函数将子进程的输出传递给父进程,并进行相应的日志记录。

总结起来,从Python2.7到3.7的迁移打破了使用subprocess、Pool和stdout的日志记录,是因为Python 3中对于子进程和进程池的处理方式发生了变化,不再直接重定向子进程的输出到父进程的标准输出(stdout)。为了解决这个问题,可以使用新的logging模块来记录子进程的输出,或者使用回调函数来处理进程池的输出。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券