使用 Python 中的 Twill 打开链接:“‘模块’对象没有属性‘Popen’”这是什么?
-
26-09-2019 - |
题
我已经下载并安装了 Python 2.5.4 在我的计算机上(我的操作系统是 视窗XP),已下载 “Goggle App Engine 软件开发套件” 并用 Python 创建了我的第一个应用程序,这是一个名为 你好世界 包含一个同名的小 python 文件(你好世界.py)。以下是该小文件的内容:
print 'Content-Type: text/plain'
print ''
print 'Hello, world!'
每当我在我的计算机上本地运行此应用程序时 “Goggle App Engine 软件开发套件”, ,我的浏览器(FireFox)总是向我显示一个白色窗口 你好世界! 写在其中。
然后我下载了 斜纹布 并将其解压成 你好世界 目录。 正确安装斜纹布, ,我能够从 Twill shell 执行一些小命令。例如,我可以通过某个链接转到网页:
然后我想直接从 Python 执行相同的操作(即通过使用 Python 中的 Twill 来实现。)以下是 斜纹布文档页面对此有说明:
斜纹的 Python API
使用 TwillBrowser 制作扩展
斜纹布本质上是机械化包装周围的薄壳。所有斜纹命令都在commands.py 文件中实现,pyparsing 负责解析输入并将其转换为Python 命令的工作(请参阅parse.py)。交互式 shell 工作和 readline 支持是通过 cmd 模块(来自标准 Python 库)实现的。
使用 Python 中的斜纹
在 Python 中使用斜纹有两种相当简单的方法。(它们是相互兼容的,所以你不需要在它们之间进行选择;只需使用合适的即可。)
第一种方法是简单地导入commands.py 中的所有命令并直接从Python 使用它们。例如,
from twill.commands import *
go("http://www.python.org/")
showforms()
这样做的优点是非常简单,并且直接与命令参考中记录的命令集相关联。
所以我决定使用这种方式。我删除了之前的内容 你好世界.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'"
任何人都可以向我解释一下这个 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'
(你可以看到整个页面 这里)
您知道这意味着什么以及出了什么问题吗?
解决方案
整洁的程序在从混乱,破碎的EEEEVIL网页中生成正确的HTML方面做得很好。默认情况下 将页面整齐地排列 然后再进行处理。由 默认值,因为 Python 库 解析 HTML 的 处理不正确的 HTML,并将 在 "真实世界 "的网页。
要禁用此功能,请设置配置 do_run_tidy 0。
其他提示
您无法使用 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