2010-02-24 32 views
10

在我的Python程序,當我發送的用戶通過使用WebBrowser模塊的創建Gmail帳戶,蟒蛇顯示:如何禁用python中的webbrowser消息?

「:在現有的瀏覽器會話中創建新的窗口請輸入您的Gmail用戶名。」

有什麼辦法擺脫「在現有瀏覽器會話中創建新窗口」,因爲它佔用了用戶在其Gmail帳戶中鍵入的空間。

這個代碼是:

webbrowser.open('https://www.google.com/accounts/NewAccount?service=mail') 
gmail_user = raw_input('Please enter your Gmail username: ') 

編輯:嘗試了兩者的亞歷克斯·馬爾泰利的建議後,代碼:http://pastebin.com/3uu9QS4A

編輯2:我已經決定只是告訴用戶轉到Gmail註冊頁面,而不是實際發送到那裏,因爲這樣做更簡單,並且導致沒有(當前無法解決的)錯誤。

+1

當您切換這兩個語句的順序時會發生什麼? –

+0

我無法切換它們,因爲這會在我的代碼中造成更多問題。 如果你可以看看代碼http://pastebin.com/GcHL2iYj 也許你可以幫助更多?謝謝。 – ErikT

+1

這裏工作得很好(MacOSX 10.5)。你在哪個平臺上?它應該適用於所有形式的Unix和Windows。在你的代碼中後面還有其他的錯誤(當然兩個「返回」一個也不會工作 - 第一個執行,所以第二個永遠不會到達),但這些與你的問題沒有密切關係。 –

回答

12

正如S.Lott在評論中提示的那樣,您應該先做raw_input;然而,本身並不會抑制來自webbrowser的消息,正如你所問 - 它只是推遲它。

對於實際上抑制消息,您可以暫時重定向標準輸出或標準錯誤 - 您選擇的瀏覽器用於發送該消息的那兩個中的任意一個。在Python級別(通過sys.stdoutsys.stderr)重定向它們可能沒有用,因爲您的瀏覽器將直接進行輸出;而,可以在操作系統級別做,例如,爲標準輸出:

import os 
gmail_user = raw_input('Please enter your Gmail username: ') 
savout = os.dup(1) 
os.close(1) 
os.open(os.devnull, os.O_RDWR) 
try: 
    webbrowser.open(whatever) 
finally: 
    os.dup2(savout, 1) 

(用於標準誤差,而不是標準輸出,使用2個而不是1)。這是相當低級的編程,但由於webbrowser模塊不會給你「鉤子」來控制瀏覽器的打開方式,它幾乎是(或多或少)確保抑制該消息的唯一選擇。

+0

謝謝。這完美地工作,除了要求Gmail用戶名的部分從不顯示。 也許如果你看看代碼http://pastebin.com/GcHL2iYj 你會知道答案?謝謝 – ErikT

+0

@ErikT,在那個代碼中,'finally'子句中沒有'os.dup2(savout,1)'(正如我在答案中所顯示的那樣),所以標準輸出永遠不會恢復 - 在「 break'現在是18行。 –

+0

添加後,程序現在只是以該語句結束,而不是像下一個代碼塊(gmail用戶名輸入)一樣。 – ErikT

2

在這裏有一個answer to another question

您可以使用

webbrowser.get().open('https://www.google.com/accounts/NewAccount?service=mail') 

我有XDG-打開安裝(Linux)上,使用webbrowser.open()時導致消息START/usr/lib目錄/火狐/火狐我。 使用上面的方法不顯示此消息(並仍然使用xdg-open)。

這將抑制輸出到標準輸出。儘管如此,它並不會將輸出壓縮到標準錯誤。我在終端中仍然有錯誤信息。