我有一个处理发送到设备的命令的线程。它打开一个子进程,将命令发送到qmicli应用程序(https://sigquit.wordpress.com/2012/08/20/an-introduction-to-libqmi/),得到回复并处理回复。
这通常适用于运行数天/数周。但是我注意到,当我进行subprocess.Popen
调用时,线程有时会停止做任何事情(下一行代码不运行),简化代码如下所示:
try:
self.qmi_process = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
# Log value of self.qmi_process happens here
if self.qmi_process:
out = self.qmi_process.communicate()
else:
return "ERROR: no qmi_process"
self.qmi_process = None
ret = ''.join(str(e) for e in out if e)
except:
return "ERROR: Caught unhandled exception"
我已开始记录subprocess.Popen
调用的值,以查看communicate()
调用是否正在阻止,或者在创建subprocess
调用之前是否失败。事实证明,由于某种原因,subprocess.Popen
失败并且未记录self.qmi_process
值,但我的Exception
代码未被调用,任何想法如何发生?
subprocess.Popen
不会返回。
我有多个线程正在调用popen,我读过这会导致2.7中的死锁吗?