我需要在对行缓冲的Popen调用中设置 stderr 流 . 我发现了 bufsize 参数,但它适用于所有 stdin , stdout 和 stderr 文件 .
stderr
bufsize
stdin
stdout
如何调整每个文件的缓冲区别?
我假设您使用PIPE用于stderr?在这种情况下,我认为你可以做这样的事情:
p = subprocess.Popen(..., stderr=subprocess.PIPE) fd = p.stderr.fileno() my_stderr = os.fdopen(os.dup(fd), 'rU', new_bufsize) os.close(fd) # use my_stderr from here on
如果您打算最后将 stdout / stderr 写入文件,并且您只需要输出无缓冲,则可以使用以下命令:
LOG_FILE = codecs.open('somelog.txt', 'a', 'utf_8', buffering=0) subprocess.Popen(ARGS, stdout = LOG_FILE, stderr = LOG_FILE).communicate()
然后使用的缓冲将是文件的缓冲,在这种情况下:没有缓冲 .
2 回答
我假设您使用PIPE用于stderr?在这种情况下,我认为你可以做这样的事情:
如果您打算最后将
stdout
/stderr
写入文件,并且您只需要输出无缓冲,则可以使用以下命令:然后使用的缓冲将是文件的缓冲,在这种情况下:没有缓冲 .