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

时间:2016-01-25 18:19:35

标签: python-2.7 subprocess windows-8.1 live-streaming

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

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

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

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

如你所见,我试过“bufsize = 0”。我也尝试使用-u选项运行python。由于我运行的是Windows 8和python 2.7,因此无法使用Pexpect。

如何从子进程获取不会导致时间延迟的流输出?

1 个答案:

答案 0 :(得分:0)

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

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

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