atexit.register(function)
Python スクリプトの終了時に呼び出される関数を登録するためにを使用することは、一般的な方法です。
問題は、これが醜い方法で失敗するケースを特定したことです。スクリプトが別の python スクリプトから実行された場合、execfile()
.
この場合、Python は終了時に関数を見つけることができないことがわかります。これは理にかなっています。
私の質問は、この問題が発生しない方法でこの機能を維持する方法です。
これは私にとってはうまくいきます。別のファイルによって実行されるファイルを作成しましたa.py
。
$ cat a.py
import atexit
@atexit.register
def myexit():
print 'myexit in a.py'
次にb.py
、execfile を呼び出します。
$ cat b.py
import atexit
@atexit.register
def b_myexit():
print 'b_myexit in b.py'
execfile('a.py')
を実行するb.py
と、登録されている両方の関数が呼び出されます。
$ python b.py
myexit in a.py
b_myexit in b.py
これらのスクリプトは両方とも、実行したときに同じディレクトリにあることに注意してください。a.py
Ryan Ginstrom が彼の回答で述べたように、別のディレクトリにある場合は、次のようにフル パスを使用する必要があります。
execfile('/path/to/a.py')
あなたが抱えている問題は、現在の作業ディレクトリの場所にあると思います。次のようにして、正しい場所を指定していることを確認できます。
import os
target = os.path.join(os.path.dirname(__file__), "mytarget.py")