Используя Twill из Python, чтобы открыть ссылку: «Модуль» объект не имеет атрибута «Popen», «Что это?

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

Вопрос

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


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

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

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

alt text

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


Python API Twill

Используя Twillbrowser, делая расширения

Твилл по сути, тонкая оболочка вокруг механизма пакета. Все команды Twild реализуются в командных файлах. PPY, а Pyparding делает работу расставания ввода и преобразования его в команды Python (см. Parse.py). Интерактивная работа оболочки и поддержка для чтения реализована через модуль CMD (из стандартной библиотеки Python).

Используя Twill из Python

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

Первый - просто импортировать все команды в командах .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 App Engine», мой браузер, вместо того, чтобы с изображением содержимого веб-сайта www.python.org, дает мне сообщение об ошибке: Объект «Модуль» не имеет атрибута «Popen» :

alt text

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

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


: «Модуль» объект не имеет атрибута «Popen»

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

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

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

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


Обновление 1.

(Это обновление - мой ответ на второй ответ, указанный ниже леолук)

Здравствуйте, Леолук !!!

Я пытался сделать это таким образом:

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'

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

У вас есть идеи, что это значит и что пошло не так?

Это было полезно?

Решение

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

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

Другие советы

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

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

Я думаю, что вы должны использовать 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top