如何在Python中禁用webbrowser消息?
在我的Python程序中,当我使用webbrowser模块让用户去创建一个Gmail账户时,Python会显示:
“请输入您的Gmail用户名:在现有浏览器会话中创建了新窗口。”
有没有办法去掉“在现有浏览器会话中创建了新窗口”这句话,因为它占用了用户输入Gmail账户的空间。
这段代码是:
webbrowser.open('https://www.google.com/accounts/NewAccount?service=mail')
gmail_user = raw_input('Please enter your Gmail username: ')
编辑:在尝试了Alex Martelli的两个建议后,代码是:http://pastebin.com/3uu9QS4A
编辑 2:我决定不直接把用户送到Gmail注册页面,而是告诉他们去那个页面,这样做更简单,也不会出现我目前无法解决的错误。
2 个回答
这里有一个与其他问题相关的回答,可以参考一下。
你可以使用
webbrowser.get().open('https://www.google.com/accounts/NewAccount?service=mail')
我在Linux上安装了xdg-open,当我使用webbrowser.open()
时,出现了一个信息START /usr/lib/firefox/firefox。使用上面的方法后,这个信息就不会显示了(而且xdg-open仍然在使用中)。
这个方法可以抑制标准输出的内容,但并不是所有情况下都能抑制错误输出。我在终端中仍然能看到错误信息。
正如S.Lott在评论中提到的,你可能应该先使用raw_input
;不过,这样做并不能完全阻止webbrowser
发出的消息,只是把它推迟了。
如果你想真正地抑制这个消息,可以暂时改变标准输出或标准错误的方向——这取决于你选择的浏览器是用哪个来发出这个消息。直接在Python层面上重定向(通过sys.stdout
或sys.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模块没有提供“钩子”让你控制浏览器的打开方式,这几乎是唯一的选择,可以在一定程度上确保抑制这个消息。