【发布时间】:2017-05-08 14:33:10
【问题描述】:
我正在用 python 编写一个程序,它通过subprocess.Popen 命令调用另一个程序。
被调用的程序会启动一个与用户交互的 GUI,但在此之前它会通过一些服务对用户进行身份验证。
话虽如此,我正试图找出一种方法来了解用户何时退出该 GUI。基本上,我想等到 GUI 退出,然后在我的程序中继续。
我的问题是,由于我调用的程序在实际启动 GUI 之前通过了这些服务,所以我调用的程序似乎结束了,然后产生了一个新进程,即 GUI,然后'无法等待 pid,因为我的 pid 已经终止。
我试过这个:
p = subprocess.Popen('/user/sbin/startprogramtolaunchgui')
p.wait()
printf 'done'
但“完成”会立即打印,而不是在退出 GUI 之后。另外,当我运行命令时
ps -ef
我调用的程序“startprogramtolaunchgui”不在进程列表中。但是,我看到它在进程列表中启动的 gui(我要监视的那个)
编辑:
我想出了这个:
def isRunning(pid):
try:
os.kill(pid, 0)
return True
except OSError:
return False
p = subprocess.Popen('/user/sbin/startprogramtolaunchgui')
time.sleep(5)
temp = subprocess.check_output(['pgrep', 'gui']) #get pid of GUI process
while(isRunning(int(temp))):
pass
print 'GUI CLOSED'
它有效......但这真的是一个好的方法吗??
【问题讨论】:
标签: python subprocess wait popen waitpid