Does GAE accept twill at all?

2019-09-19 04:42发布

问题:

I have created my GAE application in directory "my_application". Inside this directory I created a .py file and named it "my_scrypt".

The contents of "my_scrypt" in the beginning were as following:


print 'Content-Type: text/plain'
print ''
print 'This is my first application'

Then I ran it locally on my machine (Windows XP) in the installed browser (Mozilla FireFox) with "GAE Launcher" - everything was fine - I could see that sentence ("This is my first application") on the screen.

Then I deployed this application to GAE (again with the help of "GAE Launcher") - everything was fine again - I could see the same sentence on the screen.

Then I changed the contents of "my_scrypt" a bit:


from twill.commands import *
config('use_tidy', '0')
go ("http://us.yahoo.com/")
showlinks()

Downloaded "twill0.9" (from here), chose and copied "twill" folder from there, and pasted it in "my_application" directory.

When I ran this new application locally (with "GAE Launcher") everything was fine - I could see a list of yahoo.com links on the screen, but when I uploaded this application to GAE, I received only an error message.

Why is it so? I don't think it's because the version of mechanize being used by twill here is too old - the code in "my_script" is so simple, any version of mechanize must be able to handle it.

Does GAE accept twill (as an external module) at all?

You can view the stack trace of the error in the "Update 1" section right below (↓).


UPDATE 1:

(This update is my answer to Nick)

Hello, Nick. I checked the admin console, so here is the stack trace:

<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

回答1:

Twill is trying to import 'subprocess'. This is a Python module for spawning threads, and it's not available on App Engine. You'll either need to see if you can persuade Twill to work without spawning processes (probably by modifying the code), or you'll need to use mechanize or simply urlfetch directly.