Python将标准错误和标准输出记录到文件中



我只是想听听你的意见。我有几个子进程正在运行,我想将标准错误和标准输出打印到一个文件中。到目前为止,我已经这样做了:

def write_to_stderr_log(process):
    stderr= open("stderr.log", "w")
    proc_err = process.communicate()
    print >> stderr, proc_err
    stderr.close()
def write_to_stdout_log(process):
    stdout = open("stdout.log", "w")
    proc_out = process.communicate()
    print >> stdout, proc_out
    stdout.close()
def logger():
    logger = logging.getLogger('error_testing')
    hdlr = logging.FileHandler('error.log')
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
    hdlr.setFormatter(formatter)
    logger.addHandler(hdlr)
    logger.setLevel(logging.WARNING)
    logger.error('We have a problem')
    logger.debug('debugging')
    logger.info('some info')
logger()
proc = subprocess.Popen(['FastTree -nt test.fasta'], bufsize=512, stdin = None, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell=True) 
write_to_stderr_log(proc)
write_to_stdout_log(proc)

这是最好的方法吗?如果我有多个进程,我猜它会重写日志文件,所以这可能是一个问题。感谢你的建议。由于

我很确定您可以提供自己的file实例作为subprocess.Popen的关键字。

>>> out = open('stdout.log', 'wb')
>>> err = open('stderr.log', 'wb')
>>> child = subprocess.Popen('FastTree -nt test.fasta', stdin=None, stdout=out,
                             stderr=err)
>>> rc = child.wait()
>>> out.close()
>>> err.close()

以下是subprocess.Popen文档中重要的部分:

stdinstdoutstderr分别指定所执行程序的标准输入、标准输出和标准错误文件句柄。有效值为PIPEDEVNULL、已存在的文件描述符(正整数)、已存在的文件对象NonePIPE表示应该创建一个到子进程的新管道。DEVNULL表示使用特殊文件os.devnull。使用None的默认设置,将不会发生重定向;子进程的文件句柄将从父进程继承。此外,stderr可以是STDOUT,这表明stderr数据应该被捕获到与stdout相同的文件句柄中。

相关内容

  • 没有找到相关文章

最新更新