2010-02-24 11 views
10

Nel mio programma Python, quando invio all'utente di creare un account Gmail con l'uso del modulo di browser web, pitone display:Come posso disattivare il messaggio del browser Web in python?

"Inserisci il tuo nome utente Gmail: nuova finestra creata nella sessione corrente del browser."

C'è un modo per sbarazzarsi di "nuova finestra creata nella sessione del browser esistente", in quanto occupa lo spazio in cui l'utente digita nel proprio account Gmail.

Il codice per questo è:

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

EDIT: Dopo aver provato entrambi i suggerimenti di Alex Martelli, il codice è: http://pastebin.com/3uu9QS4A

EDIT 2: ho deciso semplicemente di raccontare gli utenti di andare alla pagina di registrazione di Gmail invece di inviarli effettivamente lì, in quanto è molto più semplice da fare e si traduce in errori (attualmente non risolvibili da me).

+1

Cosa succede quando si cambia l'ordine di queste due istruzioni? –

+0

Non riesco a cambiarli, in quanto ciò potrebbe causare più problemi nel mio codice. Se poteste dare un'occhiata al codice http://pastebin.com/GcHL2iYj forse potreste aiutare di più? Grazie. – ErikT

+1

Funziona bene qui (MacOSX 10.5). Su quali piattaforme sei? Dovrebbe funzionare su tutte le forme di Unix e Windows. Ci sono altri bug più avanti nel tuo codice (due 'return's uno dopo l'altro non funzioneranno mai, ovviamente - il primo viene eseguito, quindi il secondo non viene mai raggiunto) ma quelli non sono pertinenti alla tua domanda. –

risposta

12

Come suggerisce S.Lott in un commento, è consigliabile eseguire prima lo raw_input; tuttavia, di per sé, non sopprime il messaggio da webbrowser, come tu chiedi, ma lo rimanda.

In realtà sopprimere il messaggio, è possibile reindirizzare temporaneamente l'output standard o l'errore standard, a seconda di quale dei due browser utilizzato utilizza per emettere tale messaggio. Probabilmente non è utile reindirizzarli a livello di Python (tramite sys.stdout o sys.stderr), poiché il browser eseguirà direttamente l'output; piuttosto, si può fare a livello di sistema operativo, ad esempio, per l'output standard:

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) 

(per errore standard invece dello standard output, utilizzare 2 invece di 1). Questa è una programmazione piuttosto di basso livello, ma poiché il modulo del browser non ti dà "ganci" per controllare il modo in cui il browser viene aperto, è praticamente l'unica scelta (più o meno) di garantire la soppressione di quel messaggio.

+0

Grazie. Ciò funziona perfettamente, TRANNE che la parte che richiede il nome utente Gmail non viene mai visualizzata. Forse se dai un'occhiata al codice http://pastebin.com/GcHL2iYj sapresti la risposta? Grazie – ErikT

+0

@ErikT, in quel codice non c'è 'os.dup2 (savout, 1)' nella clausola 'finally' (come ho mostrato nella mia risposta), in modo che l'output standard non venga mai ripristinato - aggiungilo prima del' break' line che ora è 18. –

+0

Dopo averlo aggiunto, il programma ora termina proprio in quell'istruzione anziché andare al prossimo blocco di codice (l'input del nome utente gmail) come dovrebbe. – ErikT

2

C'è uno answer to another question che è rilevante qui.

È possibile utilizzare

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

ho xdg-open installato (Linux), che ha portato a un messaggio START/usr/lib/firefox/firefox per me quando si utilizza webbrowser.open(). Utilizzando il metodo sopra questo messaggio non viene visualizzato (e xdg-open è ancora usato).

Questo comando elimina l'output su stdout. Tuttavia, non sopprime l'output a stderr per tutte le configurazioni. Ho ancora dei messaggi di errore nel terminale.

Problemi correlati