我正在尝试使用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。
如何从子进程获取不会导致时间延迟的流输出?
答案 0 :(得分:0)
请参阅应解决您问题的this SO查询。基于您创建子流程的方式;您正在使用未缓冲的输入。这不仅在Python中而且在另一个运行时也表现不佳。
将bufsize
设置为 -1 - 这将确保使用完整缓冲(系统默认模式)来读取您的输入。
请在进行此更改后检查效果并告知我们。