Уведомления

Группа в Telegram: присоединиться

#1 Сен. 28, 2012 03:02:30

psyh0y
Зарегистрирован: 2012-09-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Перехват сообщения о закрытии консоли.

Хотя, наверное я немного не правильно сформулировал свой вопрос. В общем суть:
Как мне выполнить функцию, по событию закрытия консоли. То есть прежде чем программа закроется, должны выполнится некоторые действия.
Погуглил, везде написано только про перехват событий оконных приложений, про консоль что то ничего.
p.s. своей консоли, не чужой.

Отредактировано psyh0y (Сен. 28, 2012 03:03:20)

Офлайн

#2 Сен. 28, 2012 03:55:06

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Перехват сообщения о закрытии консоли.

Если перед закрытием программы, то может подойдет atexit



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Сен. 28, 2012 06:35:25

psyh0y
Зарегистрирован: 2012-09-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Перехват сообщения о закрытии консоли.

PooH
Если перед закрытием программы, то может подойдет atexit

Хм… а она будет работать при принудительном завершении программы? То есть при закрытии консоли, нажатием на крестик, например.
——————–update….
Да как оказалось не работает…
———————————–update….
На уровне Win32 Api отлавливать CTRL_CLOSE_EVENT…. как то не по питонски…
Либо запускать процесс, который будет следить за закрытием консоли, что тоже не по питонски.
Есть ли стандартные модули/методы, что бы это осуществить?

Отредактировано psyh0y (Сен. 28, 2012 06:47:16)

Офлайн

#4 Сен. 28, 2012 08:47:12

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Перехват сообщения о закрытии консоли.

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 - не знаю что поможет.

Отредактировано reclosedev (Сен. 28, 2012 08:48:14)

Офлайн

#5 Сен. 29, 2012 16:03:02

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Перехват сообщения о закрытии консоли.

От убийства процесса может помочь только другой процесс-монитор.

Офлайн

#6 Сен. 29, 2012 16:45:59

psyh0y
Зарегистрирован: 2012-09-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Перехват сообщения о закрытии консоли.

odnochlen
От убийства процесса может помочь только другой процесс-монитор.

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

reclosedev
Но это не кроссплатформено. SIGBREAK - от закрытия консоли по крестику, windows only (в *nix SIGKILL может быть?). SIGINT - от CTRL+C. От принудительного убийства процесса Python - не знаю что поможет.
Вечерком попробую, спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version