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


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

Всякий раз, когда я запускал это приложение локально на своем компьютере с "Goggle App Engine Software Комплект разработчика " , мой браузер (FireFox) всегда отображал мне белое окно с надписью Привет, мир! .

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

alt text

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


API Python Twill

Использование TwillBrowser Создание расширений

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

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

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

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

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

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


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


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

Но когда я попытался запустить этот файл на своем компьютере с помощью "приложения Goggle Комплект разработчика программного обеспечения движка " , мой браузер вместо отображения содержимого веб-сайта 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 )

Привет, леолук !!!

Я пробовал сделать это так:

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'

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

Ты хоть представляешь, что это значит и что пошло не так?

1
brilliant 1 Сен 2010 в 23:25

3 ответа

Лучший ответ

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

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

2
leoluk 1 Сен 2010 в 20:55

Я думаю, что вы должны использовать 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
2
leoluk 1 Сен 2010 в 19:38

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

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

2
nosklo 1 Сен 2010 в 19:29