2017-03-27 1 views
0

からの書き込み時に拒否されたIOの許可が発生しないようにすることができますどのように私はこれを行うとき、私はすぐに奇妙なものを読んで、TXT

while True: 
    with open('Test.log', "a") as log_txt: 
     log_txt.write('Test.\n') 

し、プログラムはしばらくの間、実行を開始し、突然クラッシュしました!

最も奇妙なことは、書き込む行数がわからないことです。時にはそれが数百行のために行って、いつかそれが数千だったし、いくつかの点で、それは常にクラッシュし、その後返信:

IOError:[Errno 13]Permission denied: 'Test.log' 

私は、コードを入れ、パスに関係なく、それは常に非常に短い以内に墜落しました時間。だから私は十分な速さをログを閉じていないし、再度開いてマルチスレッドのものがあるかどうか疑問に思っていた?

驚くべきことに、私は2つの文章の間に何らかの計算を行っても、それも起こることを発見しました。

# First writing 

with open('IFM.log', "a") as log_text: 
    log_text.write('Evaluating current_file: {}\n\n'.format(self._current_file.expression)) 
    log_text.write('IC: {}\n\n'.format(self._current_file.IC)) 

# Did some calculations 

self._current_file.IC_adjusted = self._current_file.IC * \ 
          (e - e ** (0.1 * self._current_file.complexity))/(e - 1) 

# Second writing 

with open('IFM.log', "a") as log_text: 
    log_text.write('IC_adjusted: {}\n\n'.format(self._current_file.IC_adjusted)) 

どうすればこの問題を解決できますか?私はtime.sleep()をやりたいとは思っていません...それはとてもダムです...

+1

使用しているオペレーティングシステムは?ウイルスチェッカーがインストールされていますか? –

+0

他のプログラムが同じファイルを使用している可能性があります。そのため、権限拒否エラーが発生します。 – elena

+0

Windows 10、私はそれが問題だったとは思わないので、他のすべてのプログラムをシャットダウンします...... –

答えて

-1

ここで最も現実的な問題は、あなたのコードがあなたのOSで利用可能なファイル記述子の数を超えている可能性があります。

私が知る限り、Pythonはwithブロックの終了直後にファイルを閉じることはできませんが、すぐ次のwhileの実行を開始します。 ファイルは今後いつか終了します。

しばらくすると、何千ものファイルが開かれている可能性があります。

+0

どうすれば問題を解決できますか? –

+1

あなたの仮説は実際には真実ではありません。 Python *は 'with'ブロックの最後にファイルを閉じます。これが起こるということは、将来的には「確定している」ということはありません。 –

+0

自動解決に頼らず、手作業でファイルを閉じてみてください。 – Sharkman