如何解决用子进程调用的程序-记录器消息不打印?
| 如果通过子进程调用该程序,则从程序的记录器获取消息时会出现问题。 这是程序BooFoo.py,它使用记录器将消息打印到文件和控制台窗口:import logging
LOG_FILENAME = \'example.log\'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)
logger = logging.getLogger(\'main\')
logger.addHandler(logging.StreamHandler())
print \'print foo\'
logger.info(\'logger boo\')
这是程序CallBooFoo.py:
import subprocess
proc = subprocess.Popen([\'python BooFoo.py\'],bufsize=512,stdin = None,stdout = subprocess.PIPE,stderr = subprocess.PIPE,shell=True)
proc_out,proc_err = proc.communicate()
print proc_out
\“ logger boo \”不会与CallBooFoo.py一起打印。任何想法如何解决这个问题?使用os.system是可行的,但是由于某些其他原因,这不是解决方案。
解决方法
logging.StreamHandler
默认为写入标准错误,而不是标准输出。您可以改用logging.StreamHandler(sys.stdout)
将其更改为标准输出。
您还可以按原样保留代码,并在调用过程中打印proc_err
的值,而不是(或补充)print5ѭ的值。这将显示子进程的标准错误。
如果需要将stdout和stderr混合在一起,可以将调用过程更改为:
proc = subprocess.Popen([\'python BooFoo.py\'],bufsize=512,stdin = None,stdout = subprocess.PIPE,stderr = subprocess.STDOUT,shell=True)
proc_out,proc_err = proc.communicate()
print proc_out
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。