httpd = make_server('', 80, server)
webbrowser.open(url)
httpd.serve_forever()
這個工程跨平臺,除非我在putty ssh終端上啓動它。 如何欺騙控制檯在單獨的進程中打開w3m瀏覽器,以便它可以繼續啓動服務器?python webbrowser.open(url)
或者如果在沒有x的shell上運行時無法跳過webbrowser.open?
httpd = make_server('', 80, server)
webbrowser.open(url)
httpd.serve_forever()
這個工程跨平臺,除非我在putty ssh終端上啓動它。 如何欺騙控制檯在單獨的進程中打開w3m瀏覽器,以便它可以繼續啓動服務器?python webbrowser.open(url)
或者如果在沒有x的shell上運行時無法跳過webbrowser.open?
也許使用線程?要麼把服務器設置獨立於主線程或代替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的事件,我認爲)
將登錄腳本中的BROWSER
環境變量定義爲類似w3m
的內容應該可以解決問題。
編輯:我意識到你不希望你的腳本在瀏覽器運行時被阻塞。
在這種情況下,可能像這樣簡單:
BROWSER="echo Please visit %s with a web browser"
會更好。
按照Python docs:
在Unix下,圖形瀏覽器X11下優選的,但如果圖形瀏覽器不可用或X11顯示不可用的文本模式的瀏覽器將被使用。如果使用文本模式瀏覽器,則調用進程將阻塞,直到用戶退出瀏覽器。
因此,您需要檢測您是否處於僅用於控制檯的環境中,並採取適當的措施(如不打開瀏覽器)。
或者,您可能可以定義BROWSER
環境變量 - 如Alexandre所示 - 並讓其運行一個腳本,該腳本不執行任何操作或通過&
在後臺打開瀏覽器。
你怎麼檢測僅在python中使用控制檯? 腳本也可能在儘可能多的noob機器上運行,因爲它們只是啓動此腳本。 – 2010-04-14 18:42:55
在每個平臺上完美搭配有或沒有x :) – 2010-04-14 19:48:12