【问题标题】:python webbrowser.open(url)python webbrowser.open(url)
【发布时间】:2011-02-07 17:16:46
【问题描述】:
httpd = make_server('', 80, server)
webbrowser.open(url)
httpd.serve_forever()

这可以跨平台工作,除非我在 putty ssh 终端上启动它。 如何欺骗控制台在单独的进程中打开 w3m 浏览器,以便它可以继续启动服务器?

或者如果在没有 x 的 shell 上运行时无法跳过 webbrowser.open?

【问题讨论】:

    标签: python


    【解决方案1】:

    也许使用线程?要么将服务器设置与主线程分开,要么将浏览器打开,如下所示:

    import threading
    import webbrowser
    
    def start_browser(server_ready_event, url):
        print "[Browser Thread] Waiting for server to start"
        server_ready_event.wait()
        print "[Browser Thread] Opening browser"
        webbrowser.open(url)
    
    url = "someurl"
    server_ready = threading.Event()
    browser_thread = threading.Thread(target=start_browser, args=(server_ready, url))
    browser_thread.start()
    
    print "[Main Thread] Starting server"
    httpd = make_server('', 80, server)
    print "[Main Thread] Server started"
    server_ready.set()
    
    httpd.serve_forever()
    browser_thread.join()
    

    (将服务器设置放在主线程中让它可以捕获我认为的 ctrl+c 事件)

    【讨论】:

    • 无论有没有 x 都可以在每个平台上完美运行 :)
    【解决方案2】:

    将登录脚本中的BROWSER 环境变量定义为w3m 之类的内容应该可以解决问题。

    编辑:我知道您不希望您的脚本在浏览器运行时被阻止。

    在这种情况下,也许像这样简单的:
    BROWSER="echo Please visit %s with a web browser" 会更好。

    【讨论】:

      【解决方案3】:

      根据Python docs

      在 Unix 下,X11 下首选图形浏览器,但如果图形浏览器不可用或 X11 显示器不可用,则将使用文本模式浏览器。如果使用文本模式浏览器,调用进程将阻塞,直到用户退出浏览器。

      因此,您需要检测您是否处于仅限控制台的环境中,并采取适当的措施,例如不打开浏览器。

      或者,您可以定义 BROWSER 环境变量 - 正如 Alexandre 建议的那样 - 并让它运行一个脚本,该脚本要么什么都不做,要么通过 & 在后台打开浏览器。

      【讨论】:

      • 如何仅在 python 中检测控制台?脚本也打算在尽可能多的菜鸟机器上运行,因为他们也启动了这个脚本。
      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 2020-05-12
      • 2017-10-23
      • 2015-03-04
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多