Подтвердить что ты не робот

Как отключить сообщение webbrowser в python?

В моей программе python, когда я отправляю пользователю создание учетной записи gmail с помощью модуля webbrowser, python отображает:

"Пожалуйста, введите свое имя пользователя Gmail: Создано новое окно в существующем сеансе браузера."

Есть ли способ избавиться от "созданного нового окна в существующем сеансе браузера", поскольку он занимает пространство, в котором пользователь вводит свою учетную запись Gmail.

Код для этого:

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

EDIT: После опроса обоих предложений Alex Martelli код: http://pastebin.com/3uu9QS4A

РЕДАКТИРОВАТЬ 2: Я решил просто сказать пользователям перейти на страницу регистрации gmail, а не отправлять их там, так как это намного проще сделать и не приводит к отсутствию (в настоящее время-неразрешимости- by-me).

4b9b3361

Ответ 1

Как указывает 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

Существует ответ на другой вопрос, который здесь имеет значение.

Вы можете использовать

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

У меня установлен xdg-open (Linux), который привел к сообщению START/usr/lib/firefox/firefox для меня при использовании webbrowser.open(). Используя метод выше, это сообщение не отображается (и xdg-open все еще используется).

Это выводит вывод на стандартный вывод. Однако он не подавляет вывод на stderr для всех настроек. У меня все еще есть сообщения об ошибках в терминале.