7

重複の可能性:
Pythonで開いているファイルを確認してください

こんにちは、

現在開いているすべてのファイルハンドルのリストを取得することは可能ですか。それらは環境内のどこかに保存されていると思います。

致命的なエラーが発生したときに開いているファイルを安全に処理したいので、is関数に興味があります。つまり、ファイルハンドルを閉じて、破損している可能性のあるファイルを元のファイルに置き換えます。

処理は機能していますが、開いているファイルハンドルがわからないため、このアイデアを実装できません。

余談ですが、ファイルハンドルが初期化されると、これを別のインポートされたメソッドに継承できますか?

ありがとうございました

4

3 に答える 3

6

lsof、/ proc / pid / fd /

于 2010-07-30T10:41:31.873 に答える
2

これを行う良い方法は、ファイルを開くタイミングを追跡するようにコードを変更することです。

def log_open( *args, **kwargs ):
    print( "Opening a file..." )
    print( *args, **kwargs )
    return open( *args, **kwargs )

次に、log_openの代わりにを使用openしてファイルを開きます。Fileクラスを変更して自分自身をログに記録するなど、もっとハッキーなことをすることもできます。これは、上記のリンクされた質問でカバーされています。

ガベージコレクターを巻き込んだり、調べたりするなど、嫌な、汚いハックがあるかもしれませんが、絶対に本当に真剣にやらなけれ__dict__ばならない場合を除いて、それはしたくありません。

于 2010-07-30T10:45:54.097 に答える
0

withPython 2.5以降を使用している場合は、キーワードを使用できます(ただし、2.5には` from future import with_statementが必要です)

with open('filename.txt', 'r') as f:
    #do stuff here
    pass
#here f has been closed and disposed properly - even with raised exceptions

どんな壊滅的な失敗が声明を狂わせる必要があるのか​​私にはわかりませんがwith、それは本当に悪いものだと思います。WinXPで、私の簡単な非科学的なテスト:

import time
with open('test.txt', 'w') as f:
   f.write('testing\n')
   while True:
       time.sleep(1)

その後、Windowsタスクマネージャーでプロセスを強制終了しても、データはファイルに書き込まれます。

于 2010-07-30T13:31:46.027 に答える