我需要在对线路缓冲的Popen
调用中设置stderr
流。我发现了bufsize
参数,但它适用于所有stdin
,stdout
和stderr
文件。
如何为每个文件调整缓冲?
答案 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()
然后使用的缓冲将是文件的缓冲,在这种情况下:没有缓冲。