我正在尝试在默认浏览器中从python启动本地html文件。现在我的默认设置是谷歌浏览器。如果我双击.html文件,Chrome将启动。
当我使用python的webbrowser.open时,IE启动,而地址栏为空白。
Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import webbrowser >>> filename = 'test.html' >>> webbrowser.open('file://'+filename) True >>> print(webbrowser.get().__class__.__name__) WindowsDefault
我检查了我的默认程序,它们看起来正确。我正在使用Win 7 SP1。为什么Chrome无法启动?
更新 :代码将在未知的操作系统和机器上运行,因此注册浏览器或更新路径不是选项。我在想解析URL file://,然后进行os.path.exists检查,这os.path.realpath可能是答案。
file://
os.path.exists
os.path.realpath
我的主要问题是通过尝试file://在相对路径前添加一个错误的URL 。可以用以下方法解决:
webbrowser.open('file://' + os.path.realpath(filename))
使用webbrowser.open将尝试多种方法,直到一个“成功”为止,这是一个宽松的定义。
webbrowser.open
在WindowsDefault类调用os.startfile()它失败并返回False。我可以通过在Windows run命令中输入URL并看到错误消息而不是浏览器来验证这一点。
WindowsDefault
os.startfile()
False
两者GenericBrowser和BackgroundBrowser都将subprocess.Popen()使用exe调用,即使该URL错误,该exe也会成功执行,然后返回True。IE并未提供该问题的迹象,所有其他浏览器都有一条不错的消息,提示它们找不到该文件。
GenericBrowser
BackgroundBrowser
subprocess.Popen()
True
BROWSER
这是我的原始设置:
>>> import webbrowser >>> webbrowser._tryorder ['windows-default', 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE'] >>> webbrowser._browsers.items() [('windows-default', [<class 'webbrowser.WindowsDefault'>, None]), ('c:\\program files\\internet explorer\\iexplore.exe', [None, <webbrowser.BackgroundBrowser object at 0x00000000022E3898>])] >>>
这是修改环境变量后的设置:
C:>path=C:\Program Files (x86)\Mozilla Firefox;%path% C:>set BROWSER=C:\Users\Scott\AppData\Local\Google\Chrome\Application\chrome.exe C:>python Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import webbrowser >>> webbrowser._tryorder ['C:\\Users\\Scott\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe', 'windows-default', 'firefox', 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE'] >>> webbrowser._browsers.items() [('windows-default', [<class 'webbrowser.WindowsDefault'>, None]), ('c:\\program files\\internet explorer\\iexplore.exe',[None, <webbrowser.BackgroundBrowser object at 0x000000000235E828>]), ('firefox', [None, <webbrowser.BackgroundBrowser object at 0x000000000235E780>]), ('c:\\users\\scott\\appdata\\local\\google\\chrome\\application\\chrome.exe', [None, <webbrowser.GenericBrowser object at 0x000000000235E8D0>])] >>>
该webbrowser._tryorder给试图浏览器的列表。注册chrome或添加BROWSER env var或修改我的路径都会使我获得正确的浏览器,并显示更好的错误消息。
webbrowser._tryorder
感谢您的帮助,没有您的想法我无法解决。