我将外部程序的标准输出捕获到字节对象中:>>> from subprocess import *>>> stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]>>>
我将外部程序的标准输出捕获到一个 bytes
对象中:
>>> from subprocess import *
>>> stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
>>> stdout
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
我想将其转换为普通的 Python 字符串,以便可以像这样打印它:
>>> print(stdout)
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2
如何 bytes
使用 Python 3 str
对象转换为
See 在 Python 3 中将字符串转换为字节的最佳方法? for the other way around.
我认为你确实想要这个:
>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
>>> command_text = command_stdout.decode(encoding='windows-1252')
Aaron 的回答是正确的,只是你需要知道 哪种 编码。我相信 Windows 使用“windows-1252”。只有当你的内容中有一些不寻常的(非 ASCII)字符时,这才会有影响,但那时就会有所不同。
顺便说一句,这确实 很 重要,这是 Python 转向使用两种不同类型的二进制和文本数据的原因:它无法在它们之间进行神奇的转换,因为除非你告诉它,否则它不知道编码!你唯一知道的方法是阅读 Windows 文档(或在此处阅读)。