我将外部程序的标准输出捕获到字节对象中:>>> 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.
由于这个问题实际上是在询问 subprocess
输出,因此您可以使用更直接的方法。最现代的方法是使用 subprocess.check_output
并传递 text=True
(Python 3.7+) 以使用系统默认编码自动解码 stdout:
text = subprocess.check_output(["ls", "-l"], text=True)
对于 Python 3.6, Popen
接受 编码 关键字:
>>> from subprocess import Popen, PIPE
>>> text = Popen(['ls', '-l'], stdout=PIPE, encoding='utf-8').communicate()[0]
>>> type(text)
str
>>> print(text)
total 0
-rw-r--r-- 1 wim badger 0 May 31 12:45 some_file.txt
如果您不处理子进程输出,则标题中问题的一般答案是将 解码 为文本:
>>> b'abcde'.decode()
'abcde'
如果没有参数, sys.getdefaultencoding()
。如果您的数据不是 sys.getdefaultencoding()
解码 decode
:
>>> b'caf\xe9'.decode('cp1250')
'café'