5

現在、Windows でコンソール ベースの Python プログラムを実行しています。Ctrlプログラムはそのデータの大部分をメモリに保持し、定期的にデータをディスクに保存するか、ユーザーがキーボード割り込み ( + C) イベントを介してアプリケーションをシャットダウンしたときに保存します。

私が抱えている問題は、ユーザーがコンソール ウィンドウの右上にある [X] ボタンを押すと、セッションが終了し、メモリ内のデータが失われることです。私が探しているのは、閉じる前にメモリをクリーンアップできるように、イベント/シグナルまたはフックです。

外部ライブラリなしでこれを行うことを望んでいますが、これが不可能な場合でも、それを行う方法を知りたいです。

4

1 に答える 1

6

Windows で

を使用している場合はpywin32、コンソールが閉じられる前にイベントを実行できます。これで、誰が、または何がコンソールを閉じているかがわかるかどうかはわかりませんが、おそらくこれで途中まで進むでしょう。また、チェックアウトすることもできます:コンソール アプリが閉じないようにする ...

def on_exit(signal_type):
   print('caught signal:', str(signal_type))

import win32api
win32api.SetConsoleCtrlHandler(on_exit, True)

これに遭遇してLinuxを使用する人のために...

SSH セッション/ウィンドウを閉じると、SIGHUP シグナルがスローされます (シグナル ハングアップ)。

import signal

signal.signal( signal.SIGHUP, handler )

def handler(signum, frame):
  #this is called when the terminal session is closed
  #do logic before program closes
  pass
于 2011-03-17T03:53:19.543 に答える