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