使用sh模块,我想log处理的stdout/stderr并捕获stdout进行处理。这个过程可能需要很长时间,日志记录不能等到过程完成,这样用户才能实时看到输出。你知道吗
下面的代码可以很好地记录stdout/stderr。但是stdout和stderr是混合的,没有方便的方法将两者分开。你知道吗
import sh
import logging
logger = logging.getLogger(__name__)
command = sh.bash('-c', 'echo a; echo b >&2', _iter=True, _err_to_out=True)
for line in command:
logger.error(line)
print(command.stdout)
输出如下:
a
b
b'a\nb\n'
有没有一种方法可以做同样的事情,但是不混合stdout
和stderr
?你知道吗
解决方案是将_out和_err设置为所需的日志函数(例如logging.error)。当从
stderr
或stdout
读取新行时,将立即调用它,并以增量方式向用户显示输出。你知道吗但是,当设置
_out
或_err
时,sh
不收集输出,并且不可用于处理。这就是_tee=True的用途:它收集stdout
和stderr
,即使设置了_out
或_err
。你知道吗输出为
相关问题 更多 >
编程相关推荐