我正在制作一个小型Python程序,它调用webbrowser
模块打开一个URL。打开URL非常有用。
我的问题是,一旦达到这行代码,问题就会没有响应。如何让程序继续执行这行代码并继续执行?在有问题的行下面是有问题的行,在上下文中:
if viewinbrowser == "y":
print "I can definitely do that. Loading URL now!"
webbrowser.open_new(url)
print "Exiting..."
sys.exit()
程序没有达到执行print "Exiting..."
,我添加了因为我注意到程序由于某种原因没有离开if语句。
我正在从命令行运行此程序,以防这很重要。 编辑:我在Kubuntu 9.04 i386上运行,使用KDE 4.3通过backports。我使用Firefox 3.5作为我的默认浏览器,在KDE的系统设置中声明,并由程序正确调用。 (至少,在Firefox中打开一个带有所需URL的新标签 - 我相信这是所需的功能。) /编辑
此外,我认为这个问题几乎可以在任何外部调用中发生,但我对Python很新,并且不知道要在此站点上搜索的术语。 (搜索“python webbrowser”并没有产生任何帮助。)所以,如果已经在不同的标题下进行了讨论,我很抱歉!
有什么建议吗?
答案 0 :(得分:5)
这看起来取决于您正在运行的平台。
我猜你是在Windows上,正如另一位评论家提到的那样没有分叉。我也猜测webbrowser模块在内部使用fork,这就是为什么它在Windows上不适合你的原因。如果是这样,那么使用线程模块创建一个打开webbrowser的新线程可能是最简单的解决方案:
>>> import webbrowser
>>> import threading
>>> x=lambda: webbrowser.open_new('http://scompt.com')
>>> t=threading.Thread(target=x)
>>> t.start()
答案 1 :(得分:4)
这里最简单的事情可能是分叉。我很确定这在Windows中不起作用,因为我认为他们的流程模型可能与unix类操作系统不同。不过,这个过程将是类似的。
pid = os.fork()
if pid:
# we are the parent, continue on
print "This runs in a separate process from the else clause."
else:
#child runs browser then quits.
webbrowser.open_new(url)
print "Exiting..."
sys.exit()
答案 2 :(得分:0)
webbrowser模块进行系统调用以启动单独的程序(Web浏览器),然后等待(“阻止”)退出代码。只要您从其他程序启动程序,就会发生这种情况。你必须(A)编写自己的函数,不阻止等待webbrowser退出(通过使用线程,fork()或类似的东西),或者找出webbrowser模块是否有非阻塞调用。