使用Python中的subprocess.check_output捕获日志记录输出

时间:2020-05-12 07:42:26

标签: python logging subprocess bots

我正在运行Telegram机器人,该机器人基本上是我所做的贝叶斯分类器的接口。我发出了在远程服务器上启动测试的命令,并且测试仪最初使用logging模块将有关测试的信息打印到stdout。当我尝试通过subprocess.check_output生成子进程时,我注意到stdout和stderr都是空字节字符串。我通过用logging.info函数替换了最后一个真正重要的print调用来解决此问题。我猜想logging不会在与subprocess.check_output相同的标准输出上书写?我在做错什么吗?

编辑

根据要求,我要添加一些有关实际运行的代码的上下文。我不知道这是否重要,但是为了完整起见,我要补充一点,我用来运行机器人的框架是pyrogram。

可以找到由机器人调用的测试器here,而调用该脚本的机器人的代码为here

1 个答案:

答案 0 :(得分:0)

我猜是日志记录没有写在subprocess.check_output期望的同一stdout上?

logging完全不写入标准输出(默认);它会写入stderr。

您将需要通过以下方式添加stderr参数来将stderr重定向到stdout:subprocess.check_output(..., stderr=subprocess.STDOUT),或者您需要使用其他子过程功能之一,例如run访问stderr。

文档确实会说:

推荐的调用子流程的方法是在它可以处理的所有用例中使用run()函数