子进程命令无法返回

时间:2017-08-28 08:52:39

标签: python multithreading python-2.7 subprocess

我有一个处理发送到设备的命令的线程。它打开一个子进程,将命令发送到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中的死锁吗?

0 个答案:

没有答案