Используя Twill из Python, чтобы открыть ссылку: «Модуль» объект не имеет атрибута «Popen», «Что это?
-
26-09-2019 - |
Вопрос
Я скачал и установил 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. Например, я мог бы повернуться на веб-страницу по какой-либо ссылке:
Тогда я хотел выполнить ту же операцию непосредственно из 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» :
Пожалуйста, посмотрите на всю страницу здесь.
Вот последние три строки этой страницы:
: «Модуль» объект не имеет атрибута «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