1

プログラムを再起動せずに手動でインポートを保持するにはどうすればよいですか?

私はこれを試しました:

class runProgram:
    def cmdEval(self,data):
        try:
            return str(repr(eval(data)))
        except Exception as e:
            return e
    def cmdImport(self,data):
        try:
            __import__(data)
            return "Imported."
        except: 
                return "Error to import"
    def run(self):
        while True:
            command = input("Command: ")
            command,data = command.split(" ",1)
            if command == "ev": print(self.cmdEval(data))
            elif command == "imp": print(self.cmdImport(data))

次に、次のことを行いました。

>>> runProgram().run()
Command: imp time
Imported.
Command: ev time.time()
name 'time' is not defined

結果はうまくいきませんでしたが、データを保存せずに動的にインポートすることはできませんか? つまり、それを使用できるようにしたいのですが、再起動した後は使いたくありません。その特定のセッションのために何かをインポートする必要がある場合に備えて、そこに持っておきたいだけです。たとえば、これは望ましい結果です私が欲しい、

imp time
ev time.time()
>1383535034.20894
>>> ================================ RESTART ================================
>>> time.time()
Traceback (most recent call last):
  File "<pyshell#238>", line 1, in <module>
    time.time()
NameError: name 'time' is not defined

これは可能ですか?

4

1 に答える 1

3

__import__インポートされたモジュールを返し、グローバル名前空間を変更しません。

次の行を置き換えます。

__import__(data)

と:

globals()[data] = __import__(data)
于 2013-11-04T03:23:56.160 に答える