代码之家  ›  专栏  ›  技术社区  ›  ErikT

如何禁用Python中的WebBrowser消息?

  •  11
  • ErikT  · 技术社区  · 15 年前

    在我的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 回复  |  直到 11 年前
        1
  •  12
  •   Alex Martelli    15 年前

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

        2
  •  2
  •   Community CDub    7 年前

    有一个 answer to another question 这与这里有关。

    你可以使用

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

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

    这将支持输出到stdout。但对于所有设置,它不会禁止输出到stderr。我在终端中仍然有错误消息。