2010-02-24 35 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)。

这将抑制输出到标准输出。尽管如此,它并不会将输出压缩到标准错误。我在终端中仍然有错误信息。