Utilizzando Twill da Python per aprire un collegamento: “oggetto 'modulo' non ha alcun attributo 'Popen'” Che cosa è?
-
26-09-2019 - |
Domanda
Ho scaricato e installato Python 2.5.4 sul mio computer (il mio sistema operativo è Windows XP ), scaricato ‘Goggle App Engine Software Development Kit’ e ha creato la mia prima applicazione in Python, che era una directory denominata HelloWorld che conteneva un piccolo file di pitone con lo stesso nome ( helloworld.py ). Ecco il contenuto di quel file di piccole dimensioni:
print 'Content-Type: text/plain'
print ''
print 'Hello, world!'
Ogni volta che mi sono imbattuto questa applicazione a livello locale sul mio computer con “Goggle App Engine Software Development Kit” , il mio browser (FireFox) sempre mi ha mostrato una finestra bianca con Ciao, mondo! scritto in esso.
Poi ho scaricato Twill e scompattato in HelloWorld di directory. Dopo aver installato correttamente Twill , sono stato in grado di eseguire alcuni piccoli comandi da shell saia. Per esempio, ho potuto girare ad una pagina web da parte di alcuni link:
Poi ho voluto per eseguire la stessa operazione direttamente da Python (cioè per mezzo di utilizzare saia da Python.) Qui è che la pagina di documentazione Twill dice in proposito :
di twill di Python API
Uso delle estensioni che fanno gli TwillBrowser
twill è essenzialmente un guscio sottile attorno al pacchetto Mechanize. Tutti i comandi twill sono implementati nel file commands.py, e pyparsing fa il lavoro di analisi input e la sua conversione in comandi Python (vedi parse.py). lavoro shell interattiva e supporto readline viene attuata tramite il modulo cmd (dalla libreria standard Python).
Utilizzo di saia da Python
Ci sono due modi abbastanza semplice da usare twill da Python. (Sono compatibili con l'altro, in modo che non c'è bisogno di scegliere tra di loro;. Solo l'uso a seconda del caso)
Il primo è quello di importare semplicemente tutti i comandi in commands.py e utilizzarli direttamente da Python. Ad esempio,
from twill.commands import *
go("http://www.python.org/")
showforms()
Questo ha il vantaggio di essere molto semplice, oltre ad essere legato direttamente alla serie documentata di comandi nel riferimento comandi.
Così ho deciso di usare in questo modo. Ho cancellato il contenuto precedente della helloworld.py e lo diede il nuovo contenuto:
from twill.commands import *
go("http://www.python.org/")
showforms()
Ma quando ho cercato di eseguire il file sul mio computer con “Goggle App Engine Software Development Kit” , il mio browser, invece di rappresentare i contenuti di www.python.org sito web, mi dà un messaggio di errore: oggetto 'modulo' non ha alcun attributo 'popen' :
Si prega di tenere uno sguardo alla intera pagina qui .
Qui ci sono le ultime tre righe in questa pagina:
: 'modulo' oggetto non ha attributo 'Popen'
args = ("'module' object has no attribute 'Popen'",)
message = "'module' object has no attribute 'Popen'"
Può qualcuno, per favore, mi spieghi che cosa questo attributo Popen è tutto e che cosa sto facendo male qui?
Grazie a tutti in anticipo.
Aggiorna 1
(questo aggiornamento è la mia risposta allala seconda risposta fornita in appresso con leoluk )
Ciao, leoluk !!!
Ho provato a farlo in questo modo:
config use_tidy 0
from twill.commands import *
go("http://www.python.org/")
, ma non ha funzionato. Ho ricevuto questo messaggio di errore:
<type 'exceptions.SyntaxError'>: invalid syntax (helloworld.py, line 1)
args = ('invalid syntax', (r'E:\helloworld\helloworld.py', 1, 15, 'config use_tidy 0\n'))
filename = r'E:\helloworld\helloworld.py'
lineno = 1
message = ''
msg = 'invalid syntax'
offset = 15
print_file_and_line = None
text = 'config use_tidy 0\n'
(Si può vedere l'intera pagina qui )
Hai la minima idea di cosa significhi e cosa è andato storto?
Soluzione
Il programma ordinata fa un lavoro piacevole di producendo correttezza del codice HTML da storpiato, rotti, pagine Web eeevil. Per impostazione predefinita, twill verrà eseguito pagine attraverso ordinata prima di elaborarli. Questo è attiva per default, perché le librerie Python che parse HTML sono molto male si tratta di errato HTML, e la volontà Spesso restituire risultati non corretti su "Mondo reale" le pagine Web.
Per disattivare questa funzione, insieme config do_run_tidy 0.
Altri suggerimenti
non è possibile utilizzare qualsiasi cosa nel motore di Google App. usi Twill non roba disponibili su Google App Engine per il lavoro. Quindi twill non è pienamente supportato dal motore di app.
in particolare, il codice sta tentando di chiamare un comando esterno, tidy
, e chiamando comandi esterni nel motore di app non funziona.
Penso che si dovrebbe usare mechanize
direttamente. Twill comunica con il sistema in un modo che non è supportato da Google App Engine.
import mechanize
browser = mechanize.Browser()
browser.open('http://www.python.org')
for f in browser.forms():
print f # you'll have to extend it