2

小さなスクリプトを書きました。使用可能なすべてのモジュール (インストールされているかどうかに関係なく) を python ディレクトリで検索するように設計されており、現在ロードされているモジュールを確認し、選択したモジュールを動的にロードするオプションを提供します。後者__import__()は、文字列を渡すために使用します-(これは私が問題を抱えている場所です-しかし、すぐに戻ります)...次に、すべてのクラスのモジュールを「参照」するオプションを提供します、関数など ( dir([module name])~を使用)。

問題:

モジュールが動的に読み込まれると (try/exceptステートメントに埋め込まれます)、成功すると「モジュールが読み込まれました」と報告され、失敗すると...当然...「読み込みに失敗しました...」と報告されます。

モジュールの名前、たとえば「uu」という名前のモジュールを入力すると、「ロード済み」と表示されます。だから私はそれがロードされていることを知っています-しかし、戻ってLOADEDモジュールのすべてをチェックする関数を呼び出すと、空白です(を使用sys.modules)

私は、Pythonがモジュールを一時的な場所にロードしていると考えています。これはsys.modules、スクリプトを終了してそこにないことを確認するsys.modulesためではありません。

4

1 に答える 1

1

Nascent_Notes、素敵なスクリプトです! uuロード(コマンド 3) とロードされたモジュールのリストの出力 (コマンド 2)を試みましたが、どちらも正常に動作しているようです。

ただし、「モジュールを参照」(コマンド 4) しようとすると、次のエラーが表示されます。

HlpWiz>>> 4
What module do you want to look more into?:  uu

*An error occurred - probably because the module isn't loaded or is misspelled*

実行してみてください

#!/usr/bin/env python
import sys
__import__('uu')
print(sys.modules['uu'])
print(dir(uu))

を取得する必要がありますNameError: name 'uu' is not defined

したがって__import__、モジュールは正常にインポートされますが、グローバル名前空間にuuは追加されないようです。変数 name でモジュールにアクセスすることはできません。ただし、次の方法でアクセスできます。uuuuuusys.modules

したがって、変更

    var_mod = input("What module do you want to look more into?:  ")
    print "\n attempting to browse... please wait!"
    time.sleep(2)
    browse_mod(zlib = var_mod)

    var_mod = raw_input("What module do you want to look more into?:  ")
    print "\n attempting to browse... please wait!"
    time.sleep(2)
    browse_mod(zlib = sys.modules[var_mod])

raw_input使用するよりもはるかに安全であるだけでなくinput(ユーザーは予期しない/悪意のあるコマンドを実行できません)、ここで必要なことも実行raw_inputします。

マイナーな注意点として、変更することもできます

i = 1
for line in sample:
    print i, line
    i = i + 1

よりpythonicに

for i,line in enumerate(sample):
    print i+1, line

編集

sys.modules は dict (ディクショナリの略) です。dict は電話帳のようなものです。名前 (「キー」として知られています) を指定すると、電話番号 (より一般的には「値」) が返されます。

sys.modules の場合、キーはモジュール名 (文字列) です。値はモジュール オブジェクトそのものです。

ブラケット表記を使用して辞書内の値にアクセスします。単なるuu文字列です sys.modules['uu'] が、モジュールですuu

ここで dict の全文を読むことができます: http://docs.python.org/tutorial/datastructures.html#dictionaries

于 2009-12-28T12:48:13.910 に答える