我正在使用subprocess.Popen
从脚本中调用系统程序,并将stdout
和stderr
捕获到日志文件中。但是,所有返回的信息都位于一行中,且未解释\n
和\t
字符。是否有模块将那些文件包装在我的日志文件中?
import logging
import subprocess as sp
# build list for cmd
logging.info('Command to run: {}'.format(cmd_list))
cmd = sp.Popen(cmd_list, stdout=sp.PIPE, stderr=sp.STDOUT)
stdout, stderr = cmd.communicate()
logging.info(stdout)
# output is INFO:root:b"Welcome to MAGMA v1.07b (linux/s)\nUsing flags:\n\t--annotate...
Python记录了str(stdout)
,但是stdout
是字节流,因此您获得了以bytes
开头的整个b'
表示形式,并使用反斜杠转义了换行符。您需要先对其进行解码。在系统上使用默认编码应该有效]
>>> import logging
>>> logging.basicConfig()
>>> import subprocess as subp
>>> cmd = subp.Popen(["ls"], stdout=subp.PIPE, stderr=subp.STDOUT)
>>> stdout, stderr = cmd.communicate()
>>> logging.warning(stdout)
警告:root:b:a.py \ nb.py \ nc.py \ ne.py \ nf.py \ ng.py \ nh.py \ ni.py \ nj.py \ nl.py \ n__pycache __ \ n'
>>> logging.warning(stdout.decode())
WARNING:root:a.py
b.py
c.py
e.py
f.py
g.py
h.py
i.py
j.py
l.py
__pycache__