<p>默认情况下,如果<code>Popen</code>调用上的<code>universal_newlines=False</code>,则<code>Popen.stdout</code>将以字节为单位读取,这是默认值。因此,如果<code>Popen</code>调用上的<code>universal_newlines</code>关键字参数未设置为<code>True</code>,则所有对<code>p.stdout.read()</code>的调用都将返回字节。因为默认值是<code>False</code>,所以读取的字节不是字符串,但是如果将其设置为<code>True</code>,那么<code>p.stdout.read()</code>应该返回<code>str</code>类型而不是字节。你知道吗</p>
<p>所以这会解决你的问题</p>
<pre><code>p = subprocess.Popen(split_cmd[1], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True, universal_newlines=True)
outputfile.write(p.stdout.read())
</code></pre>
<p>当数据在程序内存中时,这会将换行符转换为<code>\n</code>,但是<code>write</code>方法会在输出时将它们转换回特定于平台的形式。你知道吗</p>
<p>或者,您也可以通过将<code>outputfile</code>作为二进制文件打开来将数据作为二进制文件写入。你知道吗</p>
<pre><code>outputfile = open(file, 'wb')
</code></pre>
<p>然后您可以按如下方式编写代码。你知道吗</p>
<pre><code>for cmd in cmds:
split_cmd=cmd.split("::")
outputfile.write(('\t{0}:\t'.format(split_cmd[0])).encode(<optional encoding>))
p = subprocess.Popen(split_cmd[1], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)
outputfile.write(p.stdout.read())
outputfile.write("\n".encode(<optional encoding>))
</code></pre>