首页 文章

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

提问于
浏览
3

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

如何调整每个文件的缓冲区别?

2 回答

  • 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

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

    LOG_FILE = codecs.open('somelog.txt', 'a', 'utf_8', buffering=0)
    
    subprocess.Popen(ARGS, stdout = LOG_FILE, stderr = LOG_FILE).communicate()
    

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

相关问题