我正在开始一个过程并将其存储在变量中:
self.wpa_sup=subprocess.Popen(["/usr/sbin/wpa_supplicant", "-Dnl80211,wext", "-i",self.linux_iface, "-c", "/etc/wpa_supplicant_%s.conf"%self.name, "-s"],
stdout=open('/dev/null','w'), stderr=subprocess.STDOUT)
如果我打印变量,我可以看到该值已存储。
我可以看到wpa_supplicant
确实已经开始了。
但是当我检查poll()
值时,我会255
而不是None
print self.wpa_sup.poll()
当我停止这个过程时,我会这样做:
self.wpa_sup.terminate()
self.wpa_sup.wait()
self.wpa_sup=None
有时(很多时候)它有效,我可以停止并开始这个过程,成功地从poll()
读取值,但它看起来不可靠。知道为什么会这样吗?
答案 0 :(得分:2)
我可以看到
wpa_supplicant
确实已经开始了。
如果.poll()
返回非None
值;这意味着该进程死而且它已经收集(状态被读取),即您不会在进程表中看到任何内容。如果你看到.poll() == 255
之后的某些内容;这意味着您正在查看不同的流程,例如,由Popen()
启动的子流程可能依次启动孙子流程,并且在孙子继续运行时退出wpa_supplicant
,或者您可能会看到一些与之无关的流程你的脚本过程。将wpa_supplicant.pid
与您在流程表中看到的内容进行比较,找出您正在观察的场景(如果它们接近则前者比后者更可能)。
特定返回码的含义取决于命令,例如ssh
returns 255
in case of an error(否则它返回它运行的远程命令的退出状态 - 255
indicates wrong argument to the exit
builtin in bash,因此它不太可能远程程序生成它)。移除stdout=open('/dev/null', 'w')
,将错误视为@Andrea Corbellini suggested。