2011-11-04 3 views
0

では動作しません。私は私のデストラクタで作成したディレクトリを削除しよう:shutil.rmtree(...)私のスクリプト

shutil.rmtree("C:\\projects\\project_alpha\\tmp") 

それは私のPythonスクリプトでは動作しませんが、私は経由してこのコマンドを実行するときpythonコンソールが動作し、tmp-directoryが削除されます。

違いは何ですか?

+1

「機能しない」とはどういう意味ですか?あなたはエラーが発生しますか?あなたは何のエラーもなく、何も削除されません? –

+0

問題が__del__メソッドが呼び出されていないと仮定すると、私の答えが役立ちます。それ以外の場合は、コードの関連部分を投稿する必要があります。 – stderr

答えて

3

「デストラクタ」とは、__del__メソッドを意味します。 the docs on del

から

は、デル()メソッドは、インタプリタが終了まだ存在するオブジェクトのために呼ばれていることを保証するものではありません。

atexitハンドラを登録するとよいでしょう。例えば

は、モジュールレベルで:インタプリタは関係なく、どのように通訳の終了の終了時のatexitで登録

import atexit 

def cleanup_directories(): 
    directories = ["C:\\projects\\project_alpha\\tmp",] 
    for path in directories: 
     if os.path.exists(path) and os.path.isdir(path): 
      shutil.rmtree(path) 

atexit.register(cleanup_directories) 

機能が実行されます。もちろん

、あなたも実行するために、あなたのデル方法を強制するような(import gc; gc.collect()を実行するために、ガベージコレクタを強制ハック何かを行うことができますが、私はここに手足に出て行って、それが悪いと言うつもりですアイデア。

;-)

関連する問題