传递“b”给os.popen2的子进程等价物是什么?
在Python 2.x中,os.popen(command, "b")
可以让我得到一个命令输出的二进制流。这在Windows系统上特别重要,因为二进制流和文本流实际上会给你不同的字节。
subprocess
模块是用来替代os.popen
和其他创建子进程的接口的。不过,关于如何处理“b”模式的转换文档里并没有提到。那么,使用subprocess
怎么才能得到一个二进制输出流呢?
1 个回答
2
默认情况下,它会这样做,除非你使用了 Popen(..., universal_newlines=True)
这个选项。
class Popen(object):
[...]
def __init__(self, ...):
[...]
if p2cwrite is not None:
self.stdin = os.fdopen(p2cwrite, 'wb', bufsize)
if c2pread is not None:
if universal_newlines:
self.stdout = os.fdopen(c2pread, 'rU', bufsize)
else:
self.stdout = os.fdopen(c2pread, 'rb', bufsize)
if errread is not None:
if universal_newlines:
self.stderr = os.fdopen(errread, 'rU', bufsize)
else:
self.stderr = os.fdopen(errread, 'rb', bufsize)