擅长:python、mysql、java
<p><code>b''</code>是python3中<code>bytes</code>对象的文本表示。在</p>
<p>要按原样打印字节,请使用二进制流<code>sys.stdout.buffer</code>:</p>
<pre><code>#!/usr/bin/env python3
import sys
from subprocess import Popen, PIPE
with Popen('lspci', stdout=PIPE, bufsize=1) as process:
for line in process.stdout: # b'\n'-terminated lines
sys.stdout.buffer.write(line)
# do something with line here..
</code></pre>
<p>要获得文本(Unicode字符串)的输出,可以使用<code>universal_newlines=True</code>参数:</p>
^{pr2}$
<p><code>locale.getpreferredencoding(False)</code>字符编码用于解码输出。在</p>
<p>如果子进程使用不同的编码,则可以使用<code>io.TextIOWrapper()</code>显式指定它:</p>
<pre><code>#!/usr/bin/env python3
import io
from subprocess import Popen, PIPE
with Popen('lspci', stdout=PIPE, bufsize=1) as process:
for line in io.TextIOWrapper(process.stdout, encoding='utf-8'):
print(line, end='')
# do something with line here..
</code></pre>
<p>有关Python2代码和指向可能问题的链接,请参见<a href="https://stackoverflow.com/q/2715847/4279">Python: read streaming input from subprocess.communicate()</a></p>