您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在C或Python中使用popen绕过子进程输出的缓冲

在C或Python中使用popen绕过子进程输出的缓冲

通常,标准C运行时库(或多或少代表每个系统上的每个程序运行;-)检测stdout是否为终端;如果没有,它将缓冲输出(与未缓冲的输出相比,这将是巨大的效率优势)。

如果您在控制正在编写的程序,则可以(建议另一个答案)连续刷新stdout,或者(如果可行的话,更优雅些)尝试强制stdout不被缓冲,例如通过使用带有-u命令行标志的Python运行:

-u     : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)
         see man page for details on internal buffering relating to '-u'

(手册页添加内容是提及stdin和二进制模式的问题)。

如果您不能或不想触摸正在编写的程序,-u或者正在读取的程序上的类似内容不太可能有所帮助(最重要的缓冲是发生在编写者标准程序上的缓冲,而不是发生在编写程序标准上的缓冲)。读者的标准输入)。另一种方法是欺骗作者,使其相信它是通过pty标准库模块或更高级别的第三方pexpect模块(或者,对于Windows而言,是其端口)正在写入终端(即使实际上它正在写入另一个程序!)。wexpect)。

python 2022/1/1 18:50:34 有441人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶