subprocess.Popen:stdin,stdout,stderr的不同缓冲?

时间:2011-04-09 10:22:33

标签: python python-3.x popen buffering

我需要在对线路缓冲的Popen调用中设置stderr流。我发现了bufsize参数,但它适用于所有stdinstdoutstderr文件。

如何为每个文件调整缓冲?

2 个答案:

答案 0 :(得分:3)

我假设您使用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

答案 1 :(得分:1)

如果您打算最后将stdout / stderr写入文件,并且您只需要输出无缓冲,则可以使用以下内容:

LOG_FILE = codecs.open('somelog.txt', 'a', 'utf_8', buffering=0)

subprocess.Popen(ARGS, stdout = LOG_FILE, stderr = LOG_FILE).communicate()

然后使用的缓冲将是文件的缓冲,在这种情况下:没有缓冲。