【问题标题】:Python subprocess output format?Python子进程输出格式?
【发布时间】:2019-05-19 10:37:39
【问题描述】:

我想在 python 中打印一个 Pi 的操作系统系统信息。 操作系统命令“cat /etc/os-release”在终端中运行良好,行格式很好。

在 Python 中我使用了:

import subprocess

output = subprocess.check_output("cat /etc/os-release", shell=True)
print("Version info: ",output)

这行得通,但我没有得到任何换行符:

Version info:  b'PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"\nNAME="Raspbian GNU/Linux"\nVERSION_ID="9"\nVERSION="9 (stretch)"\nID=raspbian\nID_LIKE=debian\nHOME_URL="http://www.raspbian.org/"\nSUPPORT_URL="http://www.raspbian.org/RaspbianForums"\nBUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"\n'

如何格式化输出以添加换行符?

【问题讨论】:

标签: python linux subprocess


【解决方案1】:

问题在于您的字符串是一个字节串,如输出中所示,以字母 b 作为字符串的前缀: 版本信息:b'PRETTY_NAME="Raspbian GNU/Linux...

一个简单的解决方法是将字符串解码如下:

import subprocess

output = subprocess.check_output("cat /etc/os-release", shell=True)
output = output.decode("utf-8")
print("Version info: ",output)

并且结果将被正确打印。如果您在解码前后打印它的类型,您可以验证这是一个不同的对象:

import subprocess

output = subprocess.check_output("cat /etc/os-release", shell=True)
print(type(output))
output = output.decode("utf-8")
print(type(output))

这将导致以下输出:

<class 'bytes'>
<class 'str'>

【讨论】:

  • 做到了!不错的清洁解决方案!
猜你喜欢
  • 1970-01-01
  • 2021-09-20
  • 2011-08-29
  • 2018-05-28
  • 2016-07-21
  • 2016-11-19
  • 2013-02-10
  • 2018-10-04
  • 2012-05-11
相关资源
最近更新 更多