Использование Twill из Python для открытия ссылки: «У объекта« module »нет атрибута« Popen »» Что это? - PullRequest
1 голос
/ 01 сентября 2010

Я скачал и установил Python 2.5.4 на моем компьютере (моя ОС Windows XP ), загружен «Goggle App Engine Software Kit» и создал мое первое приложение на Python, которое было каталогом с именем helloworld , которое содержало небольшой файл Pythonс тем же именем ( helloworld.py ).Вот содержимое этого небольшого файла:


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

Всякий раз, когда я запускал это приложение локально на своем компьютере с «Goggle App Engine Software Kit» , мой браузер (FireFox) всегда отображал мне белое окно с надписью Hello, world! .

Затем я скачал Twill и распаковал его в каталог helloworld . После правильной установки Twill я смог выполнить несколько небольших команд из оболочки Twill.Например, я мог бы перейти на веб-страницу по некоторой ссылке:

alt text

Затем я хотел выполнить ту же самую операцию непосредственно из Python (т.е. с помощью Twill из Python.) Вот что говорит об этом страница документации Twill :


API Python Twill

Использование TwillBrowserИзготовление растяжек

саржа по сути представляет собой тонкую оболочку вокруг механизированной упаковки.Все команды twill реализованы в файле commands.py, а pyparsing выполняет синтаксический анализ входных данных и преобразовывает их в команды Python (см. Parse.py).Работа с интерактивной оболочкой и поддержка readline реализованы с помощью модуля cmd (из стандартной библиотеки Python).

Использование twill из Python

Существует два довольно простых способа использованиятвил из питона.(Они совместимы друг с другом, поэтому вам не нужно выбирать между ними; просто используйте тот, который подходит.)

Первый - просто импортировать все команды в commands.py и использовать их напрямую.из питона.Например,

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

Преимущество этого в том, что он очень прост, а также связан непосредственно с задокументированным набором команд в справочнике команд.


Поэтому я решилиспользовать этот способ.Я удалил предыдущее содержимое helloworld.py и присвоил ему новое содержимое:


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

Но когда я попытался запустить этофайл на моем компьютере с «Goggle App Engine Software Kit» , мой браузер, вместо отображения содержимого веб-сайта www.python.org, выдает мне сообщение об ошибке: объект 'module' не имеет атрибута 'Popen' :

alt text

Пожалуйста, посмотрите на всю страницу здесь .

Вот три последние строки этой страницы:


: у объекта 'module' нет атрибута 'Popen'

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

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

Может кто-нибудьПожалуйста, объясните мне, что это за атрибут Popen и что я здесь не так делаю?

Заранее всем спасибо.


Обновление 1

(это обновление - мой ответ на второй ответ, представленный ниже leoluk )

Здравствуйте, leoluk !!!

Я пытался сделать это так:

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

но это не сработало.Я получил это сообщение об ошибке:

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

(Вы можете увидеть всю страницу ЗДЕСЬ )

Есть ли у вас какие-либо идеи, что это значита что пошло не так?

Ответы [ 3 ]

2 голосов
/ 01 сентября 2010

вы ничего не можете использовать в движке Google App.Твилл использует вещи, которые недоступны в Google App Engine для работы.Таким образом, twill не полностью поддерживается механизмом приложения.

, в частности, код пытается вызвать внешнюю команду tidy, и вызов внешних команд в обработчике приложения не работает.

2 голосов
/ 02 сентября 2010

Программа tidy отлично справляется с задачей создания правильного HTML из искаженных, испорченных веб-страниц.По умолчанию twill будет проходить страницы через приборку перед их обработкой.Это включено по умолчанию, поскольку библиотеки Python, которые анализируют HTML, очень плохо справляются с некорректным HTML и часто будут возвращать неверные результаты на веб-страницах «реального мира».

Чтобы отключить эту функцию, установитеconfig do_run_tidy 0.

2 голосов
/ 01 сентября 2010

Я думаю, вы должны использовать mechanize напрямую. Twill взаимодействует с системой способом, который не поддерживается 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
...