10

我有一个记录器。像这样的东西:

import logging

logger = logging.getLogger('myApp')
hdlr = logging.FileHandler('myApp.log')
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)

我正在调用这样的外部进程:

subprocess.call("someCommand")

我想从该过程中单独捕获标准输出和标准错误,以便我可以相应地记录它们。例如

logger.info(<stdout>)
logger.error(<stderr>)

我看到了在一个流中捕获所有子流程的各种方法。但是,如果有一个实际的错误,我想把它记录下来。有没有办法做到这一点?

4

1 回答 1

25

使用subprocess.Popen()并调用.communicate()返回的流程对象:

p = subprocess.Popen(["someCommand"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()

if stdout:
    logger.info(stdout)
if stderr:
    logger.error(stderr)
于 2013-09-12T21:20:40.583 回答