子进程poll()返回错误的值

2024-10-01 15:46:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在启动一个进程并将其存储在一个变量中:

 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确实已经开始了。在

然而,当cd2> ^{pr2}$

当我停止这个过程时,我会这样做:

self.wpa_sup.terminate()
self.wpa_sup.wait()
self.wpa_sup=None

有时(很多时候)它起作用,我可以停止并启动进程,成功地从poll()读取值,但是它似乎不可靠。知道为什么会这样吗?在


Tags: nameself进程linuxusrconfetcwpa
1条回答
网友
1楼 · 发布于 2024-10-01 15:46:11

I can see that wpa_supplicant is indeed started.

如果.poll()返回一个非None值;这意味着进程是dead,而且它已经被read(状态为read),即在process表中看不到任何内容。如果您在.poll() == 255之后看到了某些内容,则表示您正在查看另一个进程,例如,Popen()启动的子进程可能已依次启动了一个孙进程,wpa_supplicant在孙进程继续运行时退出,或者您可能看到一些与脚本进程无关的进程。将wpa_supplicant.pid与您在进程表中看到的进行比较,以找出您正在观察的场景(如果它们接近,则前者比后者更有可能)。在

特定返回码的含义取决于一个命令,例如^{} returns ^{} in case of an error(否则它将返回运行^{} indicates wrong argument to the ^{} builtin in bash的远程命令的退出状态,因此远程程序不太可能生成它)。删除stdout=open('/dev/null', 'w'),将错误视为@Andrea Corbellini suggested。在

相关问题 更多 >

    热门问题