如何检查子进程是否正在轮询但未接收到数据

时间:2019-12-02 18:52:15

标签: python subprocess polling

我使用subprocess.popen命令扫描频率。

我的程序接收数据,但是,我很难检测到“消息的结尾”

因此,我正在寻找代码来检查.poll()命令是否正在轮询,但没有接收数据。

据我在google上发现的,当没有收到数据时,该行应为”,并且只有一次,该程序通过打印几行空行来进行响应。不幸的是,这只是一次,但这可能正是我想要的。意味着2或3个空行也可能表示没有数据要接收。

multimon_ng = subprocess.Popen("rtl_fm -f 169.65M -M fm -s 22050 -p 43 -g 30 | multimon-ng -a FLEX -t raw -",
  stdout = subprocess.PIPE,
  stderr = open('error.txt', 'a'),
  shell = True)

while True:
  multimon_ng.poll()
line = multimon_ng.stdout.readline()
print(line)

如何检查子进程是否在轮询?

1 个答案:

答案 0 :(得分:1)

如果该进程仍在运行,则poll()将返回None。否则,它将返回退出代码。 (From the docs

但是,我不确定这是否对您有帮助:

  • 如果要等到过程退出,只需对wait()进行一次调用即可,而不要使用poll()
  • 如果要保持程序运行并在其生命周期内响应多条消息,则需要确切了解“消息结束”信号的外观,循环调用stdout.readline(),然后在不退出该循环的情况下检测并处理该信号。