在Mac OS X上使用Python生成一个新的非阻塞进程

时间:2011-06-22 14:43:25

标签: python macos subprocess nonblocking

我发现了一些文章,甚至堆叠| 溢出问题解决了这个问题,但我还是不能这样做..

我想要做的是从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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

你需要以某种方式分离这个过程。我从spawning process from python

抓取了这个
import os
pid = os.fork()
if 0 == pid:
  os.system('firefox')
  os._exit(0)
else:
  os._exit(0)

这会生成相同脚本的分叉无头版本,然后可以随意执行任何内容,然后直接退出。