2010-02-24 8 views
10

En mi programa de pitón, cuando envío al usuario crear una cuenta de Gmail mediante la utilización del módulo de navegador web, Python muestra:¿Cómo puedo desactivar el mensaje webbrowser en python?

"Por favor introduzca su nombre de usuario Gmail: nueva ventana creada en sesión actual del navegador."

¿Hay alguna manera de deshacerse de "nueva ventana creada en la sesión de navegador existente", ya que ocupa el espacio donde el usuario escribe en su cuenta de Gmail.

El código para esto es:

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

EDIT: Después de probar tanto de las sugerencias de Alex Martelli, el código es: http://pastebin.com/3uu9QS4A

EDIT 2: he decidido sólo para decirle los usuarios van a la página de registro de Gmail en lugar de enviarlos allí, ya que es mucho más simple de hacer y no genera errores (actualmente no puedo resolverlos).

+1

¿Qué sucede cuando cambia el orden de estas dos afirmaciones? –

+0

No puedo cambiarlos, ya que esto causaría más problemas en mi código. Si pudieras echar un vistazo al código http://pastebin.com/GcHL2iYj ¿tal vez podrías ayudar más? Gracias. – ErikT

+1

Funciona bien aquí (MacOSX 10.5). ¿En qué plataformas estás? Se supone que funciona en todas las formas de Unix y Windows. Hay otros errores más adelante en su código (dos 'return's uno después del otro nunca funcionarán, por supuesto - el primero se ejecuta, por lo que el segundo nunca se alcanza) pero esos no son pertinentes a su pregunta. –

Respuesta

12

Como S.Lott insinúa en un comentario, probablemente debería hacer primero el raw_input; sin embargo, eso, per se, no suprime el mensaje de webbrowser, como usted pregunta, simplemente lo pospone.

Para realmente suprimir mensaje, puede redirigir temporalmente la salida estándar o el error estándar, cualquiera de los dos que utiliza el navegador elegido para emitir ese mensaje. Probablemente no sirva para redirigirlos a nivel de Python (a través de sys.stdout o sys.stderr), ya que su navegador va a hacer su salida directamente; más bien, se puede hacer a nivel del sistema operativo, por ejemplo, para la salida estándar:

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) 

(para el error estándar en lugar de la salida estándar, utilice 2 en vez de 1). Esta es una programación de bajo nivel, pero como el módulo webbrowser no te da "ganchos" para controlar la forma en que se abre el navegador, es prácticamente la única opción para (más o menos) asegurar la supresión de ese mensaje.

+0

Gracias. Esto funciona perfectamente, EXCEPTO que la parte que solicita el nombre de usuario de Gmail nunca se muestra. Tal vez si echas un vistazo al código http://pastebin.com/GcHL2iYj , sabrías la respuesta? Gracias – ErikT

+0

@ErikT, en ese código no hay 'os.dup2 (savout, 1)' en la cláusula 'finally' (como mostré en mi respuesta), por lo que la salida estándar nunca se restaura - agrégala antes de' break' línea que ahora es 18. –

+0

Después de agregar eso, el programa acaba ahora en esa declaración en lugar de ir al siguiente bloque de código (la entrada de nombre de usuario de Gmail) como debería. – ErikT

2

Hay un answer to another question que es relevante aquí.

Puede utilizar

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

tengo xdg abierta instalada (Linux), lo que llevó a un mensaje START/usr/lib/firefox/firefox para mí cuando se utiliza webbrowser.open(). Utilizando el método anterior, este mensaje no se muestra (y aún se usa xdg-open).

Esto suprime la salida a stdout. Sin embargo, no suprime la salida a stderr para todas las configuraciones. Todavía tengo mensajes de error en la terminal.

Cuestiones relacionadas