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

4 投票
2 回答
2357 浏览
提问于 2025-04-16 20:05

我找到了一些文章,甚至在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)

这个方法会启动一个不带界面的脚本副本,这个副本可以执行你想要的任何操作,然后直接退出。

撰写回答