我想编写一个基于控制台的包装来启动程序,除非我尝试使用'urxvt -e myscript'或某些变体来运行它,否则它可以正常工作。例如:python中的后台进程在终端上使用-e选项
test.py
#!/usr/bin/python2.7
import subprocess
print 'Press enter to launch'
raw_input()
subprocess.Popen(['firefox'])
如果我在./test.py终端上运行这一点,它按预期工作。 Firefox启动,脚本存在。但是如果我用'urxvt -e ./test.py'来试试这个脚本,那么脚本会打开,运行并启动Firefox。但是当脚本退出时,firefox被杀死了。
如何使用'term -e script'运行脚本时如何启动程序,以便在脚本退出时不会导致它死亡。
编辑:更清楚: 我想启动一个运行python脚本的新终端。脚本完成它的任务并启动程序。然后脚本退出,终端关闭,程序继续运行。
这更接近我想要的,但我意识到我并不完全清楚我想要的行为。我已经更新了操作。有了这个,终端在启动ff后不会关闭,并且在该任务被杀的时候ff仍然会退出。另外,在启动程序后,我确实需要做一些清理工作,所以程序启动时停止脚本是一个nogo。 – kalhartt
@kalhartt:嗯。在Ubuntu 11.10上,终端*在启动ff后关闭,而ff不*退出。无论如何,因为你需要在启动ff之后做一些清理*,我已经添加了一些代码来展示如何分叉原始进程,这样你就可以在一个进程中启动ff并在另一个进程中进行清理。 – unutbu
我在archlinux上运行,有趣的是它有不同的行为。即使这个当前的例子不适合我。但是分叉是正确的路径,我只需要在os.execl之前添加os.setsid(),它的效果非常好!谢谢你的一切。 – kalhartt