代码之家  ›  专栏  ›  技术社区  ›  Jean-Paul Calderone

将“b”传递到os.popen2的子进程等效于什么?

  •  1
  • Jean-Paul Calderone  · 技术社区  · 14 年前

    在Python 2 .x中, os.popen(command, "b") 给出给定命令输出的二进制流。这在Windows上非常重要,因为二进制和文本流实际上为您提供了不同的字节。

    这个 subprocess 应更换模块 os.popen 以及其他子进程生成API。但是,转换文档根本不讨论如何处理“B”模式。如何使用 子过程 ?

    1 回复  |  直到 14 年前
        1
  •  2
  •   habnabit    14 年前

    默认情况下是这样的,除非你 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)