Python 记录流数据时子进程滞后

Python Subprocess Lags When Recording Streaming Data

我正在尝试使用 python 中的子进程读取实时传感器流。特别是,子进程运行一个输出数据的命令行程序。此数据输入到 STDOUT,然后逐行读取。这是代码:

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0)

while True:
    line_out =  proc.stdout.readline()
    sys.stdout.flush() 

此代码生成传感器数据输出,但在运行时会产生时间滞后。所以最初传感器和子进程是同步的,但在一个小时内,子进程落后了 45 分钟。

如您所见,我尝试了 "bufsize=0"。我还尝试了 运行 python 和 -u 选项。 Pexpect 对我不可用,因为我是 运行 Windows 8 和 python 2.7.

如何从子进程中获取流式输出而不产生时间延迟?

请参考 this 应该可以解决您的问题的 SO 查询。基于您创建子流程的方式;您正在使用 un-buffered 输入。这不仅在 Python 中而且在另一个运行时中也表现不佳。

bufsize 设置为 -1 - 这将确保使用完整缓冲(系统默认模式)来读取您的输入。

请在进行此更改后检查性能并告知我们。