我已在目录“ my_application ”中创建了 GAE 应用程序。在这个目录中,我创建了一个.py文件,并将其命名为“ my_scrypt ”。
开头的“ my_scrypt ”内容如下:
print 'Content-Type: text/plain'
print ''
print 'This is my first application'
然后我在已安装的浏览器( Mozilla FireFox )中使用“ GAE Launcher ”在我的计算机( Windows XP )上本地运行 - 一切都很好 - 我可以在屏幕上看到那句话(“这是我的第一个应用程序”)。
然后我将此应用程序部署到 GAE (再次在“ GAE Launcher ”的帮助下) - 一切都很好 - 我可以在屏幕上看到相同的句子
然后我稍微更改了“ my_scrypt ”的内容:
from twill.commands import *
config('use_tidy', '0')
go ("http://us.yahoo.com/")
showlinks()
下载"twill0.9"(来自here),从中选择并复制“斜纹”文件夹,并将其粘贴到“ my_application ”目录中
当我在本地运行这个新应用程序时(“ GAE Launcher ”)一切都很好 - 我可以在屏幕上看到 yahoo.com 链接列表,但是当我将此应用程序上传到 GAE 时,我只收到一条错误消息。
为什么会这样?我不认为这是因为 twill 使用的机械化版本太旧了 - “ my_script ”中的代码非常简单, mechanize 的任何版本都必须能够处理它。
GAE 是否接受斜纹(作为外部模块)?
您可以在下面的“更新1”部分(↓)中查看错误的堆栈跟踪。
更新1:
(此更新是我对尼克的回答)
你好,尼克。我检查了管理控制台,所以这里是堆栈跟踪:
<type 'exceptions.ImportError'>: No module named fcntl
Traceback (most recent call last):
File "/base/data/home/apps/silkybutton/1.344911014283513184/bumper.py", line 1, in <module>
from twill.commands import *
File "/base/data/home/apps/silkybutton/1.344911014283513184/twill/__init__.py", line 52, in <module>
from shell import TwillCommandLoop
File "/base/data/home/apps/silkybutton/1.344911014283513184/twill/shell.py", line 9, in <module>
from twill import commands, parse, __version__
File "/base/data/home/apps/silkybutton/1.344911014283513184/twill/commands.py", line 70, in <module>
from browser import TwillBrowser
File "/base/data/home/apps/silkybutton/1.344911014283513184/twill/browser.py", line 17, in <module>
from _browser import PatchedMechanizeBrowser
File "/base/data/home/apps/silkybutton/1.344911014283513184/twill/_browser.py", line 9, in <module>
from utils import FixedHTTPBasicAuthHandler, FunctioningHTTPRefreshProcessor
File "/base/data/home/apps/silkybutton/1.344911014283513184/twill/utils.py", line 12, in <module>
import subprocess
File "/base/data/home/apps/silkybutton/1.344911014283513184/twill/other_packages/subprocess.py", line 378, in <module>
import fcntl
答案 0 :(得分:1)
Twill正试图导入'subprocess'。这是一个用于生成线程的Python模块,它在App Engine上不可用。您可能需要查看是否可以说服Twill在没有产生进程的情况下工作(可能通过修改代码),或者您需要使用mechanize或直接使用urlfetch。