使用 Python 中的 Twill 打开链接:“‘模块’对象没有属性‘Popen’”这是什么?

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

我已经下载并安装了 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 执行一些小命令。例如,我可以通过某个链接转到网页:

alt text

然后我想直接从 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” :

alt text

请看一下整个页面 这里.

这是该页面的最后三行:


: :“模块”对象没有属性“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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top