-1

以下のようにモジュールをインポートしました:

filename = "email"
mymodule = __import__('actions.'+filename)

私がこれに関して抱えている問題は、ファイルがすぐに実行されていることであり、ファイルから特定の関数を実行したいということです(そうすれば、ファイルを介して変数を送信できます)。

とりあえず、下の行を追加したとき(スクリプトをインポートしたとき)にスクリプトが実行されるかどうかは、if __name__ == "__main__"トリックを使用して回避するため、すぐには気になりません。

mymodule = __import__('actions.'+filename)

しかし、私が働きたいのは、以下の行を追加するときに、関数を実行したいということです。しかし、代わりに、スクリプトに存在していても、モジュールにその関数がないというエラーが表示されます。

mymodule.OpenEmail(n)

以下のスクリプトを実行するとそれ自体で動作するようにできたので、関数名は実際には重要ではありませんが、アイドル状態でインポートして上の行を実行しようとすると、モジュールが機能しないというエラーが表示されますその機能(またはいくつかの非常に類似したエラー)があります。とにかく、次のコードは私がプラグインのように使用しているサンプルスクリプトです。しかし、私の主なポイントは、Pythonでスクリプトを動的にインポートして実行できることですが、今度は変数をファイルに送信できるようにしたいと思います。どういうわけか上記のように機能を動作させることができれば、それは私の問題を解決すると確信しています。

import webbrowser
def OpenEmail():
    handle = webbrowser.get()
    handle.open('http://gmail.google.com')
OpenEmail()
print "Your email has been opened"
4

2 に答える 2

2

文書化さ__import__()れているように、ドット付きの名前と引数なしで使用するとfromlist、最上位のパッケージへの参照が返されます。適切な属性にアクセスして、ドット表記または。を使用してパッケージ階層を降順にするのはユーザーの責任ですgetattr()

于 2012-08-05T08:38:07.137 に答える
0

非常に簡単に言えば、これは私がIDLEで行ったことです

filename = 'actions.email'
mod = __import__(filename)
VAR = getattr(mod, 'email')
VAR.OpenEmail()

私のメールを開いてもらいました!

于 2012-08-06T06:49:25.363 に答える