【问题标题】:How can I disable the webbrowser message in python?如何在 python 中禁用 webbrowser 消息?
【发布时间】:2011-01-20 08:28:36
【问题描述】:

在我的 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 注册页面而不是实际将它们发送到那里,因为这样做更简单并且导致没有(当前无法解决- by-me) 错误。

【问题讨论】:

  • 切换这两条语句的顺序会发生什么?
  • 我无法切换它们,因为这会导致我的代码出现更多问题。如果您可以查看代码pastebin.com/GcHL2iYj,也许您可​​以提供更多帮助?谢谢。
  • 在这里工作正常(MacOSX 10.5)。你在什么平台上?它应该适用于所有形式的 Unix 和 Windows。您的代码后面还有其他错误(当然,一个接一个的两个returns 永远不会工作 - 第一个执行,所以第二个从未达到)但这些与您的问题无关。
  • 我在 debian Linux 上。谢谢,我会解决退货问题。因为依赖于返回变量的程序部分是有效的,我什至认为它们没有必要。

标签: python browser


【解决方案1】:

正如 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 模块没有给你“钩子”来控制浏览器打开的方式,它几乎是(或多或少)确保抑制该消息的唯一选择。

【讨论】:

  • 谢谢。这完美地工作,除了要求Gmail用户名的部分永远不会显示。也许如果您看一下代码pastebin.com/GcHL2iYj,您就会知道答案?谢谢
  • @ErikT,在该代码中,finally 子句中没有os.dup2(savout, 1)(正如我在回答中所展示的那样),因此标准输出永远不会恢复——在@987654329 之前添加它@ 现在是 18 的行。
  • 添加后,程序现在只是在该语句处结束,而不是像它应该的那样转到下一个代码块(gmail用户名输入)。
【解决方案2】:

这里有一个相关的answer to another question

你可以使用

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

我安装了 xdg-open (Linux),当我使用 webbrowser.open() 时,这会导致我收到一条消息START /usr/lib/firefox/firefox。 使用上面的方法不会显示此消息(并且仍然使用 xdg-open)。

这会抑制输出到标准输出。它不会抑制所有设置的输出到 stderr。我在终端中仍然有错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多