我正在运行Telegram机器人,该机器人基本上是我所做的贝叶斯分类器的接口。我发出了在远程服务器上启动测试的命令,并且测试仪最初使用logging
模块将有关测试的信息打印到stdout。当我尝试通过subprocess.check_output
生成子进程时,我注意到stdout和stderr都是空字节字符串。我通过用logging.info
函数替换了最后一个真正重要的print
调用来解决此问题。我猜想logging
不会在与subprocess.check_output
相同的标准输出上书写?我在做错什么吗?
编辑
根据要求,我要添加一些有关实际运行的代码的上下文。我不知道这是否重要,但是为了完整起见,我要补充一点,我用来运行机器人的框架是pyrogram。
答案 0 :(得分:0)
我猜是日志记录没有写在subprocess.check_output期望的同一stdout上?
logging
完全不写入标准输出(默认);它会写入stderr。
您将需要通过以下方式添加stderr
参数来将stderr重定向到stdout:subprocess.check_output(..., stderr=subprocess.STDOUT)
,或者您需要使用其他子过程功能之一,例如run
访问stderr。
文档确实会说:
推荐的调用子流程的方法是在它可以处理的所有用例中使用run()函数