1

Python 2.5.4をダウンロードしてコンピューター (私の OS はWindows XPです) にインストールし、「Goggle App Engine Software Development Kit」</a> をダウンロード、Python で最初のアプリケーションを作成しました。同じ名前の小さな python ファイル ( helloworld.py )。その小さなファイルの内容は次のとおりです。


print 'Content-Type: text/plain'
print ''
print 'Hello, world!' 

このアプリケーションを自分のコンピューターでローカルに実行するたびに「Goggle App Engine Software Development Kit」</a>、私のブラウザー (FireFox) は常にHello, world!という白いウィンドウを表示しました。その中に書かれています。

それから私はダウンロードしましたそれをひねり、helloworldディレクトリに展開します。Twill を適切にインストールすると、Twill シェルからいくつかの小さなコマンドを実行できました。たとえば、次のリンクから Web ページに移動できます。

代替テキスト

次に、Python から直接同じ操作を実行したいと考えました (つまり、Python から Twill を使用することにより)。これについて、Twill のドキュメント ページには次のように記載されています


ツイルの Python API

TwillBrowser の使用 拡張機能の作成

ツイルは基本的に機械化パッケージの周りの薄いシェルです。すべての twill コマンドは commands.py ファイルに実装されており、pyparsing は入力を解析して Python コマンドに変換する作業を行います (parse.py を参照)。インタラクティブなシェル作業と readline のサポートは、(標準の Python ライブラリから) cmd モジュールを介して実装されます。

Python からツイルを使用する

Python から twill を使用するには、かなり単純な方法が 2 つあります。(どちらも互換性があるため、どちらかを選択する必要はありません。適切な方を使用してください。)

1 つ目は、commands.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 Software Development Kit」</a>を使用して自分のコンピューターでそのファイルを実行しようとすると、ブラウザーは www.python.org Web サイトのコンテンツを表示する代わりに、次のエラー メッセージを表示します。 ' オブジェクトに属性 'Popen' がありません:

代替テキスト

よろしければ、ページ全体をご覧くださいここに

そのページの最後の 3 行を次に示します。


: 'module' オブジェクトには属性 'Popen' がありません

  args = ("'module' object has no attribute 'Popen'",)

  message = "'module' object has no attribute 'Popen'" 

この Popen 属性とは何か、私がここで間違っていることを誰かに説明してもらえますか?

よろしくお願いします。


更新 1

(この更新は、 leolukによって以下に提供される 2 番目の回答に対する私の回答です)

こんにちは、レオルク!!!

私はこのようにしてみました:

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'

(全ページはこちらからご覧いただけます)

それが何を意味し、何が悪かったのか分かりますか?

4

3 に答える 3

2

直接使うべきだと思います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
于 2010-09-01T19:27:43.783 に答える
2

Google App Engine では何も使用できません。Twill は、Google App Engine で利用できないものを使用して動作します。そのため、ツイルはアプリ エンジンで完全にはサポートされていません。

特に、コードは外部コマンド を呼び出そうとしてtidyいますが、App Engine で外部コマンドを呼び出すことはできません。

于 2010-09-01T19:29:11.893 に答える
2

きちんとしたプログラムは、壊れた、壊れた、ひどい Web ページから正しい HTML を生成するという素晴らしい仕事をします。デフォルトでは、twill はページを処理する前に tidy を実行します。これはデフォルトでオンになっています。これは、HTML を解析する Python ライブラリが正しくない HTML を処理するのが非常に苦手であり、「実際の」Web ページで間違った結果を返すことがよくあるためです。

この機能を無効にするには、config do_run_tidy 0 を設定します。

于 2010-09-01T20:55:38.043 に答える