Найти - Пользователи
Полная версия: Перехват сообщения о закрытии консоли.
Начало » Python для экспертов » Перехват сообщения о закрытии консоли.
1
psyh0y
Хотя, наверное я немного не правильно сформулировал свой вопрос. В общем суть:
Как мне выполнить функцию, по событию закрытия консоли. То есть прежде чем программа закроется, должны выполнится некоторые действия.
Погуглил, везде написано только про перехват событий оконных приложений, про консоль что то ничего.
p.s. своей консоли, не чужой.
PooH
Если перед закрытием программы, то может подойдет atexit
psyh0y
PooH
Если перед закрытием программы, то может подойдет atexit

Хм… а она будет работать при принудительном завершении программы? То есть при закрытии консоли, нажатием на крестик, например.
——————–update….
Да как оказалось не работает…
———————————–update….
На уровне Win32 Api отлавливать CTRL_CLOSE_EVENT…. как то не по питонски…
Либо запускать процесс, который будет следить за закрытием консоли, что тоже не по питонски.
Есть ли стандартные модули/методы, что бы это осуществить?
reclosedev
http://docs.python.org/library/signal.html
Если речь о Windows:
import os
import signal
import time
 
def on_stop(*args):
    with open('some_state.txt', 'a') as f:
        f.write('%s %r\n' % (time.ctime(), args))
    os.exit(0)
 
for sig in (signal.SIGBREAK, signal.SIGINT, signal.SIGTERM):
    signal.signal(sig, on_stop)
 
while True:
    print 'tick'
    time.sleep(1)
Но это не кроссплатформено. SIGBREAK - от закрытия консоли по крестику, windows only (в *nix SIGKILL может быть?). SIGINT - от CTRL+C. От принудительного убийства процесса Python - не знаю что поможет.
odnochlen
От убийства процесса может помочь только другой процесс-монитор.
psyh0y
odnochlen
От убийства процесса может помочь только другой процесс-монитор.

Да в итоге пришлось именно так поступить.

reclosedev
Но это не кроссплатформено. SIGBREAK - от закрытия консоли по крестику, windows only (в *nix SIGKILL может быть?). SIGINT - от CTRL+C. От принудительного убийства процесса Python - не знаю что поможет.
Вечерком попробую, спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB