0

私は2つのスクリプトを持っています。

Main.py
Update.py

Main.pyには、基本的に次のことを行う関数があります。

def log(message):
   print(message)
   os.system("echo " + message + " >> /logfile.txt")

Update.pyファイルには、基本的に更新を行う単一の関数がありますただし、更新機能全体で、その時点でのメッセージが何であれ、「log(message)」を呼び出します。

ただし、 Main.pyスクリプトの外部で関数を使用しようとすると、 NameError: global name "log" is not defined が発生するという問題があります。

何か助けはありますか?どこでも「ログ」機能を使用するにはどうすればよいですか?

※コードは説明のために簡略化しています。

編集:

Main.py imports Update from /Scripts/Update.py
Update.py imports log from Main.py

これを試してみると、「名前の更新をインポートできません」と言って失敗します

4

3 に答える 3

3

logからインポートしないでくださいMain。Main.py をスクリプトとして実行することと、それをモジュールとしてインポートすることは同等ではないため、Main.py のコードを再実行します。他のモジュールは、メイン スクリプトで定義された関数に依存するべきではありません。代わりに、log関数を別のモジュールに入れてインポ​​ートするか、何らかの方法で Main.py に明示的にロガーを他のモジュールに渡します。

更新Update: Python が見つからないため、インポートできません。Python はインポートするモジュールを4 か所でチェックしますが、関心のあるものは次のとおりです。

  • スクリプトの元のディレクトリ、および
  • PYTHONPATH環境変数で指定されたディレクトリ。

Main.py とそれがインポートするものを同じディレクトリに配置するか/ScriptsPYTHONPATH.

于 2013-07-14T18:56:41.733 に答える
1

Update.pyに次の行を追加するだけです

from Main import log

log()Update.py から呼び出せるようになります。

于 2013-07-14T18:50:33.340 に答える
1

関数をインポートする必要があります。

from Main import log

または最高:

import Main
Main.log()

相互にインポートするモジュールについては、相互に相互にインポートするモジュールを使用するにはどうすればよいですか を参照してください。

于 2013-07-14T18:50:48.080 に答える