subprocess.Popen:标准输入、标准输出、标准错误的不同缓冲?

发布于 2024-10-31 05:04:07 字数 285 浏览 6 评论 0原文

我需要在 Popen 调用行缓冲。我发现了 bufsize 参数,但它适用于所有 stdinstdoutstderr 文件。

如何调整每个文件的不同缓冲?

I'm in need of setting the stderr stream in a Popen call to line-buffered. I discovered the bufsize argument, but it applies to all of the stdin, stdout, and stderr files.

How do I adjust the buffering to be different for each file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南汐寒笙箫 2024-11-07 05:04:07

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

I assume you use PIPE for stderr? In that case, I think you can do something like this:

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
厌倦 2024-11-07 05:04:07

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

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

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

那么使用的缓冲将是文件的一个,在本例中:无缓冲。

If you intend to write stdout/stderr to a file in the end anyway and you just need the output to be unbuffered you could use the following:

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

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

Then the buffering used will be the one for the file, in this case: no buffering.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文