在Mac上使用Firefox时,webbrowser.get("firefox") 显示“无法找到可运行的浏览器”
我想知道在Mac上,应该用哪个神奇的命令行或者OSA脚本来启动一个已经打开的Firefox浏览器,或者如果Firefox没有打开的话,如何启动它并打开一个网址。
我正在测试一个叫Crunchy Python的Python程序,它会搭建一个网页服务器,然后用Firefox来展示前端内容。它用下面的代码来启动网页应用:
try:
client = webbrowser.get("firefox")
client.open(url)
return
except:
try:
client = webbrowser.get()
client.open(url)
return
except:
print('Please open %s in Firefox.' % url)
我在Mac上把Safari设置为默认浏览器,但我也安装了Firefox并且它正在运行。上面的代码在Safari中打开了新的网址(在本地服务器上)。但是Crunchy在Safari上运行得不好。我想在Firefox中查看,因为我确实有Firefox。在Python 2.5、2.6和2.7(从版本控制中)我得到了这个:
>>> import webbrowser
>>> webbrowser.get("firefox")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/webbrowser.py", line 46, in get
raise Error("could not locate runnable browser")
webbrowser.Error: could not locate runnable browser
Firefox是可以找到的。我尝试使用webbrowser.get("/Applications/Firefox.app/Contents/MacOS/firefox %s"),这会启动一个新的Firefox实例,但又抱怨说已经有另一个Firefox实例在运行。
我真的希望webbrowser能在已经打开的Firefox标签页/窗口中打开网址,如果Firefox已经在运行的话;如果没有运行的话,就在新的Firefox中打开。
我查看了webbrowser.py,发现似乎没有对MacOSX的'firefox'支持。没关系,我可以添加这个功能。但我不知道如何以我想要的方式在Firefox中打开网址。
有什么想法吗?目前,我可以强制Crunchy给我网址,然后我手动把它粘贴到Firefox中。
2 个回答
苹果使用启动服务来查找应用程序。你可以通过 open 命令来使用一个应用程序 - 苹果开发者的 open 命令手册
你需要的 python 命令是
client = webbrowser.get("open -a /Applications/Firefox.app %s")
根据尼古拉斯·赖利的评论
如果 Firefox 在应用程序列表中,那么你可以用 open -a Firefox.app %s 来打开它
你应该使用启动服务来打开网址。你可以通过 LaunchServices
模块,或者使用苹果的 open
工具,或者用我提供的 launch
工具(可以在这里找到)来实现。
使用 open
可能是最简单的方式:
% open -b org.mozilla.firefox http://www.stackoverflow.com/
(当然,你也可以在 Python 中用 subprocess
或类似的方式来实现)这样就能达到你想要的效果。