Программа на python закрывается

Модуль atexit определяет функции для регистрации и отмены регистрации функций очистки. Зарегистрированные таким образом функции автоматически выполняются после обычного завершения интерпретатора.

Модуль atexit запускает эти функции в обратном порядке, в котором они были зарегистрированы. Если вы зарегистрируете A , B и C , во время завершения работы программы они будут выполняться в порядке C , B , A .

Примечание: функции, зарегистрированные через этот модуль, не вызываются, когда программа прерывается сигналом, не обработанным Python, когда обнаружена фатальная внутренняя ошибка Python или когда вызывается os._exit() .

Примеры:

Пример демонстрирует, как модуль может инициализировать счетчик из файла, когда он импортируется и автоматически сохранять обновленное значение счетчика, когда программа завершает работу, не полагаясь на то, что приложение делает явный вызов в этот модуль при завершении.

import atexit try: with open(«counterfile») as infile: _count = int(infile.read()) except FileNotFoundError: _count = 0 def incrcounter(n): global _count _count = _count + n def savecounter(): with open(«counterfile», «w») as outfile: outfile.write(«%d» % _count) import atexit atexit.register(savecounter)

Позиционные и ключевые аргументы также могут быть переданы в atexit.register() для передачи зарегистрированной функции при ее вызове:

Как сделать чтобы консоль Python не закрывалась


def goodbye(name, adjective): print(‘Goodbye, %s, it was %s to meet you.’ % (name, adjective)) import atexit atexit.register(goodbye, ‘Donny’, ‘nice’) # или atexit.register(goodbye, adjective=’nice’, name=’Donny’)

Использование в качестве декоратора.

функция atexit.register() в качестве декоратора работает только с функциями, которые можно вызывать без аргументов.

  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Функция register() модуля atexit.
  • Функция unregister() модуля atexit.

Источник: docs-python.ru

Действия перед закрытием скрипта python

Привет у меня есть скрипт на python, который запускает в бесконечном цикле некоторые действия, но иногда мне приходится закрывать скрипт и обновлять его новой версией, делать некоторые работы на сервере и т. д.

Читайте также:
Программа развития это молекула

вопрос в том, как я могу остановить скрипт и, прежде чем закрыть его, скрипт делает некоторые действия после цикла Как закрыть соединение sqlite, закрыть соединение с брокером и т. д.

то, что я делаю сейчас, это ctr+c, пока он не остановится (несколько раз до его завершения), а затем вручную закройте соединение sqlite и т. д.

4 ответов

Вы можете поймать сигнал, выполнить что-то другое, то sys.exit

import signal import sys def signal_handler(signal, frame): print ‘You pressed Ctrl+C — or killed me with -2’ #. Put your logic here . sys.exit(0) signal.signal(signal.SIGINT, signal_handler)

можно использовать atexit модуль:

Python в .EXE ► КАК?


import atexit def cleanup(): print «cleanup» # close connections, . atexit.register(cleanup)

на cleanup() функция будет вызываться при каждом обычном завершении (включая Ctrl-C).

автор: TobiMarg

вы могли бы использовать try-except блок вокруг вашего цикла и поймать KeyboardInterrupt исключения. Или finally блок также очистить, если программа завершается упорядоченным образом. Ваш код должен выглядеть примерно так:

try: except KeyboardInterrupt: finally:

обратите внимание, что таким образом вы обрабатываете только случай, когда вы убиваете свой скрипт с помощью прерывания клавиатуры и никакого другого случая.

вы также можете использовать with сообщении см. здесь для получения дополнительной информации (как указано в комментарии)

автор: wastl

import sys try: # Program here except KeyboardInterrupt: # Close connections sys.exit(0)

Источник: askdev.ru

Почему в python при нажатии на «Отмена» при открытии нескольких файлов программа вылетает?

Добрый день! Не подскажите почему в python при нажатии на «Отмена» при открытии нескольких файлов методом QFileDialog.getOpenFileNames программа вылетает? Код:

import sys import codecs from vira import * from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import (QDialog, QFileDialog, QMessageBox, QLineEdit, QProgressBar, QProgressDialog) from PyQt5.QtCore import QDir, QDirIterator class MyWin (QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__ (self, parent) self.ui = Ui_MainWindow () self.ui.setupUi (self) self.ui.pushButton.clicked.connect (self.Open) self.ui.pushButton_2.clicked.connect (self.close) def Open(self): self.ui.textEdit.clear () files, _ = QFileDialog.getOpenFileNames (self, «Выбрать файлы», «/home», «*.txt») hjh = list (filter (lambda x: x != ‘*.las *.txt’, files)) myString = ‘n’.join (hjh) self.ui.textEdit.setText (myString) if self.ui.comboBox.currentIndex () == 0: strx = self.ui.textEdit.toPlainText () strxList = strx.split (‘n’) else: strx = self.ui.textEdit.toPlainText () strxList = strx.split (‘n’) for jk in range (0, len (strxList), 1): print (strxList[jk]) f = codecs.open (strxList[jk], ‘r’, encoding=’cp866′) for line in f: pkp = 1 for lk in range (0, len(line), 1): if line[lk] == ‘0’ or line[lk] == ‘1’ or line[lk] == ‘2’ or line[lk] == ‘3’ or line[lk] == ‘4’ or line[lk] == ‘5’ or line[lk] == ‘6’ or line[lk] == ‘7’ or line[lk] == ‘8’ or line[lk] == ‘9’ or line[lk] == ‘.’ or line[lk] == ‘,’ or line[lk] == ‘-‘ or line[lk] == ‘n’ or line[lk] == ‘ ‘ or line[lk] == ‘ ‘:#or line[lk:(lk+2)] != ‘—‘ or line[lk] != ‘#’: pkp += 1 if pkp == len(line): print(line[0:len(line)-1]) self.ui.textEdit.append(line[0:len(line)-2]) f.close() if __name__ == «__main__»: app = QtWidgets.QApplication (sys.argv) myapp = MyWin () myapp.show () sys.exit (app.exec_ ())

Читайте также:
Как запустить программу через bat файл от имени администратора

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Подписка на обсуждение 2

Источник: evileg.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru