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

问题描述 投票:1回答:1

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

编辑

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

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

python logging subprocess bots
1个回答
0
投票

我猜是日志记录没有写在与subprocess.check_output相同的标准输出上?

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

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

文档确实会说:

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

© www.soinside.com 2019 - 2024. All rights reserved.