В подпроцессе.Popen, к какому файлу применяется bufsize?

#python #stream #subprocess #popen #buffering

#python #поток #подпроцесс #popen #буферизация

Вопрос:

Мне нужно настроить stderr поток в Popen вызове с буферизацией строки. Я обнаружил bufsize аргумент, но в нем не указано, к какому из 3 файлов ( stdin , stdout , stderr ) он на самом деле применяется.

  • Какой файл изменяет bufsize аргумент?
  • Как мне изменить другие режимы буферизации файлов?

Ответ №1:

Используй исходный код, Luke 🙂 /usr/lib/python2.7/subprocess.py :

 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)
  

Похоже, что он использует bufsize во всех из них, нет возможности уточнить.