打开webbrowser后如何恢复程序(或退出)?

con*_*sch 5 python browser if-statement

我正在制作一个小型Python程序,它调用webbrowser模块打开一个URL.打开URL非常有效.

我的问题是,一旦达到这行代码,问题就没有响应.如何使程序继续执行此代码并继续执行?在有问题的行下面是有问题的行,在上下文中:

if viewinbrowser == "y":
    print "I can definitely do that. Loading URL now!"
    webbrowser.open_new(url)
    print "Exiting..."
    sys.exit()
Run Code Online (Sandbox Code Playgroud)

程序没有达到执行的程度print "Exiting...",我添加了,因为我注意到程序由于某种原因没有离开if语句.

我正在从命令行运行该程序,以防这很重要.编辑:我在Kubuntu 9.04 i386上运行,使用KDE 4.3通过backports.我使用Firefox 3.5作为我的默认浏览器,在KDE的系统设置中声明,并由程序正确调用.(至少,在Firefox中打开一个带有所需URL的新选项卡 - 我相信这是所需的功能.)/编辑

此外,我认为这个问题几乎可以在任何外部调用中发生,但我对Python很新,并且不知道要在此站点上搜索的术语.(搜索"python webbrowser"没有产生任何帮助.)所以,如果已经在不同的标题下讨论过,我道歉!

有什么建议?

Edw*_*ale 6

这看起来取决于您正在运行的平台.

  • MacOSX - 立即返回True并打开浏览器窗口.大概是你想要的行为.
  • Linux(没有X) - 打开链接textmode浏览器.关闭后,返回True.
  • Linux(带X) - 打开Konquerer(在我的例子中).立即返回True.你想要的行为.

我猜你是在Windows上,正如另一位评论家提到的那样没有分叉.我也猜测webbrowser模块在内部使用fork,这就是为什么它在Windows上不适合你的原因.如果是这样,那么使用线程模块创建一个打开webbrowser的新线程可能是最简单的解决方案:

>>> import webbrowser
>>> import threading
>>> x=lambda: webbrowser.open_new('http://scompt.com')
>>> t=threading.Thread(target=x)
>>> t.start()
Run Code Online (Sandbox Code Playgroud)


McP*_*inM 4

这里最简单的事情可能就是分叉。不幸的是,我很确定这在 Windows 中不起作用,因为我认为它们的进程模型可能与类 Unix 操作系统不同。不过,这个过程将是相似的。

import os
import sys

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()
Run Code Online (Sandbox Code Playgroud)