在 Mac OS X 上使用 Python 生成一个新的非阻塞进程
Posted
技术标签:
【中文标题】在 Mac OS X 上使用 Python 生成一个新的非阻塞进程【英文标题】:Spawn a new non-blocking process using Python on Mac OS X 【发布时间】:2011-09-20 11:20:24 【问题描述】:我找到了一些文章甚至堆栈|溢出问题解决了这个问题,但我仍然做不到..
我想做的是从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 应用程序。
我在这里缺少什么?有什么线索吗?
【问题讨论】:
这个以前的答案对我有用:***.com/questions/832331/… Firefox 只是这种情况下的一个例子(这就是它不在标题或标签中的原因)。我的进程需要能够打开任何其他进程。 【参考方案1】:为了说明我的意思:
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】:您需要以某种方式分离进程。我从spawning process from python 抢到了这个
import os
pid = os.fork()
if 0 == pid:
os.system('firefox')
os._exit(0)
else:
os._exit(0)
这会生成相同脚本的分叉无头版本,然后可以执行您喜欢的任何内容并在之后直接退出。
【讨论】:
你可以简化很多。不幸的是,我真的不能把它放在这个评论中。 我想过走这条路,甚至试了一下,但没能成功。你的代码让我的主进程退出.. @Leeron:当你说“我的主进程”时,你指的是 firefox 还是 python 脚本?os._exit
调用退出该过程,因此如果您指的是您的 python 脚本并且您不希望它在之后立即退出,只需删除该行。 @Robin:是的,你可以,但它会让序列更容易理解吗?
在子进程中(你的代码没有 else 块)使用 fork 并调用 os.system 然后调用 os._exit (你的代码没有 else 块)谢谢以上是关于在 Mac OS X 上使用 Python 生成一个新的非阻塞进程的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mac OS X Lion 上安装 Python 库“gevent”
python 在os x或mac os上使用python中的syslog - 来自https://stackoverflow.com/questions/30125412/how-can-i-log
如何在 mac os x 上使用 gunicorn 和 python3.8 而不是 python3.9?
在 Mac OS X 10.6 上使用带有 Python 2.7 的 Google App Engine SDK
如何在 Mac OS X *和* Debian (7) 上使用 SysLogHandler 或 syslog 从 Python 登录到 syslog