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

问题描述 投票:0回答:1

我使用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)

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

python subprocess polling
1个回答
1
投票

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

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

  • 如果要等到过程退出,只需对wait()进行一次调用即可,而不要使用poll()
  • 如果要保持程序运行并在其生命周期内响应多条消息,那么您将需要确切知道“消息结束”信号的外观,在循环中调用stdout.readline(),并进行检测和处理该信号而不退出该循环。
© www.soinside.com 2019 - 2024. All rights reserved.