python - 在解释换行符时记录标准输出
问题描述
我正在使用脚本从我的脚本中调用一个系统程序,并在日志文件中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__
推荐阅读
- javascript - 如何通过单击 Javascript 的按钮来模拟按键?
- .net-core - 在 .NET CORE 3.1 Web 应用程序中使用多种文化
- mongodb - MongoDB 中的模式验证器 - 未声明的字段
- javascript - 无法通过 freecodecamp 番茄钟的一些测试 + 反应更好
- javascript - VS Code 中的未绑定断点(Chrome 调试会话,Vanilla JS 应用程序(Node 后端))
- ruby-on-rails-5 - 如何在 RAILS 上的 RUBY 中从数组生成 JSON 字符串
- selenium - 如何为标签创建动态 Xpath?硒
- typescript - 扩展抽象类的类型类
- docker - 使用 docker 文件安装 Apache Web 服务器
- php - 带有2个数据库表的Datatable Json?