传递“b”给os.popen2的子进程等价物是什么?

1 投票
1 回答
693 浏览
提问于 2025-04-16 02:40

在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)

撰写回答