在Mac OS X上使用Python生成新的非阻塞进程
我找到了一些文章,甚至在StackOverflow上也看到了一些相关的问题,但我还是搞不定这个事情。
我想做的是从Python中打开一个Firefox浏览器的实例。然后,Python程序应该继续运行自己的事情,而不去管Firefox进程。
在Windows 7和XP上,我用以下方法达成了这个目标:
subprocess.Popen()
在OS X上,我试过:
subprocess.Popen(['/Applications/Firefox.app/Contents/MacOS/firefox-bin'])
subprocess.call(['/Applications/Firefox.app/Contents/MacOS/firefox-bin'])
subprocess.call(['/Applications/Firefox.app/Contents/MacOS/firefox-bin'], shell=True)
os.system('/Applications/Firefox.app/Contents/MacOS/firefox-bin')
(还有一些我忘记的其他方法)但都没有成功。我的Python应用程序会卡住,直到我去关闭Firefox应用。
我缺少了什么呢?有没有什么线索?
2 个回答
3
为了说明我的意思:
import os
if not os.fork():
os.system('firefox')
os._exit(0)
这个版本不会退出主Python进程:
import os
if not os.fork():
os.system('firefox')
os._exit(0)
2
你需要以某种方式让这个进程独立运行。我从用Python创建进程这篇文章中找到了这个方法。
import os
pid = os.fork()
if 0 == pid:
os.system('firefox')
os._exit(0)
else:
os._exit(0)
这个方法会启动一个不带界面的脚本副本,这个副本可以执行你想要的任何操作,然后直接退出。