Usando a sarja do Python para abrir um link: o objeto “'Module' não tem atributo 'Popen'" O que é?

StackOverflow https://stackoverflow.com/questions/3621432

Pergunta

Eu baixei e instalei Python 2.5.4 No meu computador (meu sistema operacional é Windows XP), baixado “Kit de desenvolvimento de software de mecanismo de aplicativos de goggle” e criou meu primeiro aplicativo em Python, que foi um diretório nomeado Olá Mundo que continham um pequeno arquivo python com o mesmo nome (helloworld.py). Aqui estão o conteúdo desse pequeno arquivo:


print 'Content-Type: text/plain'
print ''
print 'Hello, world!' 

Sempre que eu executei este aplicativo localmente no meu computador com “Kit de desenvolvimento de software de mecanismo de aplicativos de goggle”, meu navegador (Firefox) sempre me mostrava uma janela branca com Olá Mundo! escrito nele.

Então eu baixei Sarja e descompactei Olá Mundo diretório. Tendo instalado a sarja corretamente, Pude executar alguns pequenos comandos da swill shell. Por exemplo, eu poderia recorrer a uma página da web por algum link:

alt text

Então eu queria executar a mesma operação diretamente do Python (ou seja, por meio de usar a sarja de Python.) Aqui está o que o A página de documentação do Twill diz sobre isso:


API Python da Twill

Usando extensões de fabricação de twillbrowser

A sarja é essencialmente uma concha fina ao redor do pacote Mechanize. Todos os comandos de Twill são implementados no arquivo Commands.py, e o Pyparsing faz o trabalho de analisar a entrada e convertê -lo em comandos Python (consulte Parse.py). O trabalho interativo do shell e o suporte da ReadLine é implementado através do módulo CMD (da biblioteca Python padrão).

Usando a sarja de Python

Existem duas maneiras bastante simples de usar a sarja do Python. (Eles são compatíveis entre si, então você não precisa escolher entre eles; apenas use o que for apropriado.)

O primeiro é simplesmente importar todos os comandos no comandos.py e usá -los diretamente do Python. Por exemplo,

from twill.commands import *
go("http://www.python.org/")
showforms()

Isso tem a vantagem de ser muito simples, além de ser ligado diretamente ao conjunto documentado de comandos na referência dos comandos.


Então eu decidi usar dessa maneira. Eu excluí o conteúdo anterior de helloworld.py e deu o novo conteúdo:


from twill.commands import *
go("http://www.python.org/")
showforms()

Mas quando tentei executar esse arquivo no meu computador com “Kit de desenvolvimento de software de mecanismo de aplicativos de goggle”, meu navegador, em vez de descrever o conteúdo do site www.python.org, me fornece uma mensagem de erro: O objeto 'módulo' não tem atributo 'Popen' :

alt text

Por favor, dê uma olhada na página inteira aqui.

Aqui estão as três últimas linhas dessa página:


: O objeto 'módulo' não tem atributo 'Popen'

  args = ("'module' object has no attribute 'Popen'",)

  message = "'module' object has no attribute 'Popen'" 

Alguém pode, por favor, me explicar o que se trata esse atributo Popen e o que estou fazendo de errado aqui?

Obrigado a todos antecipadamente.


Atualização 1

(Esta atualização é minha resposta à segunda resposta fornecida abaixo por Leoluk)

Olá, Leoluk !!!

Eu tentei fazer desta maneira:

config use_tidy 0
from twill.commands import *
go("http://www.python.org/")

Mas não funcionou. Recebi esta mensagem de erro:

<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'

(Você pode ver a página inteira AQUI)

Você tem alguma ideia do que isso significa e o que deu errado?

Foi útil?

Solução

O programa arrumado faz um bom trabalho ao produzir HTML correto a partir de páginas da web mutiladas, quebradas e eeevil. Por padrão, o Twill executará páginas através do Tidy antes de processá -las. Por padrão, isso ocorre porque as bibliotecas Python que analisam o HTML são muito ruins em lidar com HTML incorreto e geralmente retornam resultados incorretos nas páginas da web do "mundo real".

Para desativar esse recurso, defina configuração do_run_tidy 0.

Outras dicas

Você não pode usar nada no mecanismo do Google App. O Twill usa coisas que não estão disponíveis no Google App Engine para funcionar. Portanto, a sarja não é totalmente suportada pelo App Engine.

notavelmente, o código está tentando chamar um comando externo, tidy, e chamar comandos externos no mecanismo de aplicativos não funciona.

Eu acho que você deveria usar mechanize diretamente. O Twill se comunica com o sistema de uma maneira que não é suportada pelo 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top