python webbrowser.open(url)

时间:2010-04-14 01:02:40

标签: python

httpd = make_server('', 80, server)
webbrowser.open(url)
httpd.serve_forever()

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

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

3 个答案:

答案 0 :(得分:6)

也许使用线程?将服务器设置与主线程或browsweropen分开,如:

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事件)

答案 1 :(得分:1)

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

编辑:我意识到您不希望在浏览器运行时阻止您的脚本。

在这种情况下可能是一些简单的事情:
BROWSER="echo Please visit %s with a web browser"会更好。

答案 2 :(得分:1)

根据Python docs

  

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

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

或者,您可以定义BROWSER环境变量 - 正如Alexandre建议的那样 - 让它运行一个脚本,该脚本不执行任何操作或通过&在后​​台打开浏览器。