私は、背景のPython 3.5プロセスに書き込まれているファイルを持っています。ファイルはこのプロセス(基本的には実行中のPythonスクリプト)で開かれましたが、ファイルのクローズ文を含めて、そのスクリプトの中で時折バッファをフラッシュしませんでした。手動で終了しない限り、スクリプトは無限になり、私は(今)、Pythonプロセスを強制終了すると、バッファ内のすべてのデータが失われることがわかります。この実行中のプロセスに書き込まれるデータを回復するにはどうしますか?file.close()文を使用せずにPythonプロセスを実行しているときにファイル書き込みバッファをフラッシュする方法はありますか?
1
A
答えて
2
1、例です)
pgrep python
2あなたのpythonのプロセスのPIDを取得します。)リストのファイルディスクリプタ
ls -l /proc/{PID}/fd
3)オープンGDB
$ gdb
(gdb) attach {PID}
(gdb) call fflush({FILE_DESCRIPTOR})
(gdb) detach
4)ファイルを確認してください
0
最初
f.flush()
を行い、その後os.fsync(f.fileno())
を行い、Fに関連付けられているすべての内部バッファがディスクに書き込まれることを保証します。ここで
import os
with open("filename", "w") as f:
while True: # infinite program
f.write("the text")
f.flush()
os.fsync(f.fileno())
+0
申し訳ありませんが、私は十分ではありませんでした。プロセスはすでに実行されており、この実行プロセスから回復したいと考えています。 – Omnomnious
+0
Ah。それはより困難です。あなたはおそらくgdbを使う必要があるでしょう...私は思い出させるためにここに残しておきたいと思います - プログラムをやめた後、これを忘れたくはありません:P – Shadow
関連する問題
- 1. SSL書き込みバッファをフラッシュする方法はありません
- 2. Python辞書をファイルに書き込まずに文字列にする方法はありますか?
- 3. ファイルへの書き込みをせずにselect()を実行します。desc?
- 4. ファイルを書き込み、ファイルを書き込みます。改行を使用している問題\
- 5. バッファにチャネルが書き込まれている間にバッファを書き込もうとしています
- 6. バッファにバッファを書き込む方法
- 7. フラッシュを使用せずに.solファイルを書き込むにはどうすればよいですか?
- 8. Eclipseを使用してスクリプトを実行せずにPythonコードをデバッグする方法はありますか?
- 9. ファイルをPHPでディスクに書き込まずに、RESTサーバーにファイルをPOSTする方法はありますか?
- 10. C++のofstreamファイル書き込みはバッファを使用しますか?
- 11. 実際には変数であるPythonでファイルに書き込みますか?
- 12. pythonのプロセス書き込みを、ダーティとマークされずに即時に書き戻すようにスケジュールする
- 13. 解凍せずにgzip形式でテキストファイルを読むには、その行をPythonを使用してExcelに書き込む方法はありますか?
- 14. Javaを使用してtxtファイルに書き込むときに行の制限はありますか?
- 15. 浮動小数点型をcharにキャストして、C++の書き込み関数を使用してファイルに書き込む方法はありますか?
- 16. Elispがファイルへの書き込みバッファを書き込むときに "コーディングシステムを選択"を抑制します。
- 17. Bashスクリプトは上書きせずに書き込みますか?
- 18. pythonスクリプトを実行して出力をファイルに書き込む方法は?
- 19. ファイルへの書式なし書込みを実行できますか?整数書式用の書式付き書込みを実行できますか?
- 20. catはファイルに書き込みをしていませんか?
- 21. 1つのファイルをバッファとして使用できますか?私。同時に書き込みと読み取りを行う
- 22. Apache Camelトランザクションを使用しているときにファイル書き込みをロールバックする方法はありますか?
- 23. プロセスはファイルに書き込みませんか?
- 24. cmd save "文字を改行せずにファイルに書き込む
- 25. size引数が設定されているときに、コピーせずにbuffer()を書き込み可能にする方法はありますか?
- 26. 複数の読み取りと書き込みを伴うパイプを使用して、子プロセスと親プロセス間の双方向通信を実装する方法
- 27. ファイルを1行ずつ書き込むときにRAMが不足する[Python]
- 28. 実行方法1つのファイルに対して複数の書き込みオペレーションを実行しますか?
- 29. ループ内のオブジェクトの新しいバージョンを、上書きせずに使用する方法はありますか?
- 30. .jsonファイルを読み込んで、新しいファイルに書き込む方法、Pythonで改行を挿入する
ファイルディスクリプタは数字か名前(ディレクトリ)? – Omnomnious
ファイル記述子は数字です。規格FDは、標準偏差は0、標準偏差は1、標準偏差は2です。 – lcastillov
私はこれを得た: プログラム受信信号SIGSEGV、セグメンテーションフォールト。 fflush()内の/lib64/libc.so.6の0x00007f487134d93d デバッグ中のプログラムは、GDBから呼び出された関数中に通知されました。 GDBは、信号が受信されたフレームに残ります。 この動作を変更するには、 "set unwindonsignal on"を使用します。 関数 (fflush)を含む式の評価は中止されます。 – Omnomnious