【发布时间】:2015-06-30 20:59:46
【问题描述】:
我正在编写一个相当复杂的脚本,正在使用
asyncio.create_subprocess_exec(sub_cmd, *sub_cmd_args, stdout=PIPE, stderr=PIPE)
包裹另一个 Python 程序——我无法永久修改或直接包含该程序——以捕获其 stdout/err 以进行日志记录。包装的 Python 脚本未使用 -u(无缓冲)选项,因此包装程序倾向于登录大缓冲块。如果这是常规的 subprocess.Popen 我可以通过 bufsize=1 来获得我想要的,即行缓冲。但是,如果我将它添加到 asyncio.create_subprocess_exec() 他们会专门为它捕获,我得到:
<snip>
File "/usr/lib64/python3.4/asyncio/subprocess.py", line 193, in create_subprocess_exec
stderr=stderr, **kwds)
File "/usr/lib64/python3.4/asyncio/base_events.py", line 642, in subprocess_exec
raise ValueError("bufsize must be 0")
ValueError: bufsize must be 0
我认为他们的陷阱是有充分理由的,所以我想知道是否有其他方法可以影响传输缓冲。
【问题讨论】: