Python から Twill を使用してリンクを開く:「 'module' オブジェクトには 'Popen' 属性がありません」 これは何ですか?

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

質問

ダウンロードしてインストールしました Python 2.5.4 私のコンピュータ上 (私の OS は Windows XP)、ダウンロードされました 「Goggle App Engine ソフトウェア開発キット」 そして、Python で最初のアプリケーションを作成しました。これは、という名前のディレクトリでした。 こんにちは世界 同じ名前の小さな Python ファイルが含まれていました (helloworld.py)。その小さなファイルの内容は次のとおりです。


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

このアプリケーションをコンピュータ上でローカルに実行するたびに、 「Goggle App Engine ソフトウェア開発キット」, 、私のブラウザ (FireFox) では常に白いウィンドウが表示されました。 こんにちは世界! その中に書かれています。

それからダウンロードしました ツイル そしてそれを開梱しました こんにちは世界 ディレクトリ。 Twill を適切にインストールしたこと, Twill シェルからいくつかの小さなコマンドを実行できました。たとえば、次のリンクから Web ページに移動できます。

alt text

次に、同じ操作を Python から直接実行したいと思いました (つまり、Python の Twill を使用して)。以下にその内容を示します。 Twill のドキュメント ページにそれについて記載されています:


twill の Python API

TwillBrowser の使用 拡張機能の作成

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

Python からツイルを使用する

Python からツイルを使用する非常に簡単な方法が 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 ソフトウェア開発キット」, 私のブラウザでは、www.python.org Web サイトのコンテンツを表示する代わりに、次のエラー メッセージが表示されます。 「module」オブジェクトには属性「Popen」がありません :

alt text

ぜひ全ページをご覧ください ここ.

そのページの最後の 3 行は次のとおりです。


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

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

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

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

皆様、よろしくお願いします。


アップデート 1

(この更新は、以下に提供された 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'

(ページ全体が見れます ここ)

それが何を意味し、何が間違っていたかわかりますか?

役に立ちましたか?

解決

整頓されたプログラムは、 マングルから正しいHTMLを生成し、 壊れた、不気味なWebページ。デフォルトでは、 綾はTidyでページを実行します それらを処理する前に。これは、 default は、Python ライブラリが HTMLの解析は非常に苦手です 正しくない HTML を扱い、 多くの場合、誤った結果が返されます。 「現実世界」の Web ページ。

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

他のヒント

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

特に、コードは外部コマンドを呼び出そうとしています。 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