Python как закрыть приложение
Мне известна die() команда в PHP, которая рано выходит из скрипта.
Как я могу сделать это в Python?
sys.exit([arg])
Выход из Python. Это реализуется путем вызова SystemExit исключения, поэтому действия по очистке, указанные в предложениях finally, try выполняются, и можно перехватить попытку выхода на внешнем уровне.
Необязательный аргумент arg может быть целым числом, указывающим статус выхода (по умолчанию равен нулю), или объектом другого типа. Если это целое число, ноль считается «успешным завершением», а любое ненулевое значение считается «ненормальным завершением» в оболочках и т.п. Большинство систем требуют, чтобы он находился в диапазоне 0-127, и в противном случае дают неопределенные результаты. В некоторых системах есть соглашение о назначении определенных значений определенным кодам выхода, но они обычно недостаточно развиты; Программы Unix обычно используют 2 для ошибок синтаксиса командной строки и 1 для всех других видов ошибок. Если передается объект другого типа, None эквивалентен пропусканию нуля, а любой другой объект печатается в stderr и приводит к коду выхода 1. В частности, sys.exit("some error message") быстрый способ выхода из программы при возникновении ошибки.
Поскольку в exit() конечном итоге «only» вызывает исключение, оно будет выходить из процесса только при вызове из основного потока, и исключение не перехватывается.
Обратите внимание, что это «хороший» способ выхода. @ glyphtwistedmatrix ниже указывает на то, что если вы хотите «жесткий выход», вы можете использовать его os._exit(*errorcode*) , хотя он, вероятно, в некоторой степени специфичен для ОС (например, он может не принимать код ошибки в Windows) и определенно менее дружественен, так как не позволяет переводчику выполнять очистку до того, как процесс завершится.
Предположительно sys.exit() , не работает (не убивает процесс, просто убивает поток), если вызвано фоновым потоком? @ caesium62: Да, sys.exit() возникает SystemExit исключение в текущей теме. Почему, когда я использую этот метод, я получаю следующее предупреждение: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1) Нужно больше деталей; может быть, это заслуживает отдельного вопроса?Простой способ досрочного завершения скрипта Python - это использование встроенной quit() функции. Там нет необходимости импортировать любую библиотеку, и это эффективно и просто.
Как сделать раннее завершение программы в Python? В самоучителе я нашёл несколько примеров:
Однако там не было объяснения какой метод лучше. Какой метод является наиболее "безаварийным"?
И заодно: есть ли в Python понятие Autocloseable объектов? Если я сделаю ранее завершение программы, нужно ли мне будет закрывать файлы и т.д.?
1,267 2 2 золотых знака 16 16 серебряных знаков 30 30 бронзовых знаков Спасибо! Лучшим решением является использование sys.exit() на счет второго: лучше закрывать/завершать все операции перед завершением программыКороткий ответ:
Лучше использовать sys.exit()
Механизм завершения процесса в Python реализован через бросание исключения SystemExit , таким образом можно просто создать подобное исключение и программа завершится:
Функция exit и аналогичная ей quit созданы для удобства работы в интерактивном режиме и их не рекомендуется использовать внутри скриптов:
They are useful for the interactive interpreter shell and should not be used in programs.
По факту они также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:
Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.
Есть также дополнительный метод для немедленного завершения программы: os._exit . У него довольно специфическая область применения, и там же есть замечание:
The standard way to exit is sys.exit(n)
Т.е. здесь даётся подтверждение того, что стандартный способ завершения программы -- это вызов sys.exit .
Функция os.abort , упомянутая вами, использует механизм сигналов процессу. Конкретно при вызове этой функции будет передан сигнал SIGABRT , что в linux приведёт к завершению программы и созданию дампа памяти процесса. Подобное завершение рассматривается операционной системой как аварийное, поэтому не стоит использовать его для безаварийного завершения приложения.
По второй части вопроса. В Python есть развитая система контекстных менеджеров: классов, которые умеют работать с оператором with . Самое частое использование этого механизма встречается, вероятно, с файлами.
Этот код откроет файл, напечатает его содержимое на экран и закроет файл автоматически, даже если возникнет исключение при его печати.
Для классов, которые не приспособлены для работы с with есть функция closing в библиотеке contextlib . Из документации:
Code like this:
is equivalent to this:
Вот небольшой пример работы этой функции:
Теперь небольшое отступление о том, почему стоит использовать конструкцию with .
Известно, что программа завершится от любого необработанного исключения, а не только от SystemExit . Таким образом, если в вашем коде используются какие-то ресурсы, которые требуется правильным образом закрывать перед завершением работы, нужно оборачивать работу с ними в блоки try . finally . .
Однако, при использовании конструкции with это оборачивание происходит автоматически, и все ресурсы закрываются корректно.
Так как выход из программы -- это всего лишь брошенное исключение, то и в случае использования функции sys.exit закрытие открытых в операторе with ресурсов произойдёт корректно:
Вы можете писать также и свои классы, предоставляющие ресурсы или классы, оборачивающие другие, которые нужно уметь закрывать автоматически. Для этого используются методы __enter__ и __exit__ .
Как выйти из программы в Python 3 при помощи разных самых простых команд, методов, функций, операторов. Как корректно завершить работу программы и избежать различных ошибок?
Версия Python 3.5
Стандартный способ завершения программы в Python
Для этого варианта первую строчку ниже нужно прописать в самом начале файла, так как любой импорт пакетов или модулей производится только в самом начале файла. А уже в нужном месте кода для остановки и выхода из программы следует прописать вторую строчку кода. Если поискать, в интернете можно найти информацию, что данный вариант является самым оптимальным. Также программисты пишут, что данная функция лежит в стандартном модуле и поэтому всегда доступна.
Вызов sys.exit() — стандартный способ завершения программы в Python. Но это не так, если не подключить модуль, она не сработает.
Функция exit() для выхода из программы в Python 3
А вот функция exit() поможет не просто прервать выполнения цикла, но и полностью останавливает программу, код далее не читается. В переводе с английского exit — выход. Кстати, подключать для вызова и корректной работы данной функции в Python 3.5 никакой модуль не нужно — она прекрасно работает и так.
Также была найдена информация, что exit() является помощником для интерактивной оболочки (консоли), тем временем как sys.exit предназначен для использования в программах.
Кстати, функция quit() также работает для закрытия программы на Python и не требует для своей работы подключения каких-либо модулей.
Оператор break также может закрыть выполнение программы. Чаще он используется именно в цикле для выхода з него, выполнение программы продолжится далее по коду. В переводе с английского break — перерыв.
Собственно вот
import os
os.startfile(r'dmark.txt/')
А вот как закрыть открывшиеся окошко не получается, я не могу понять что прописать .Искал искал но не нашел исчо больше запутался
Как закрывать приложения и кона запущенные из под Питона ?
)курите модуль subprocess там есть добро типа Popen и методы чтобы сделать kill или terminate по PID процесса.
Как закрывать приложения и кона запущенные из под Питона ?
А ага ! Спасибо Doza_and ! Будем пробовать Все интересней и интересней стает
Как закрывать приложения и кона запущенные из под Питона ?
os.system('taskkill /f /im exampleProcess.exe') вот вычитал вот такое на практике пробую так .
os.system('taskkill /f /im FBReader.exe') читается высвечивается cmd и все и не чего не получается
Как закрывать приложения и кона запущенные из под Питона ?
Luch2016
вам же сказали использовать subprocess, а вы по прежнему за счет системных команд пытаетесь сделать. subprocess дает контроль за вызываемым приложением. То что вы делаете вам не надо.
Как закрывать приложения и кона запущенные из под Питона ?
Popen.kill() - убивает дочерний процесс.
Вот вычитал а примера как оно применяется че то не найду не как Ы)
Как закрывать приложения и кона запущенные из под Питона ?
В Общем лучшего я не чего не придумал как прописать вот так
import os
os.startfile(r'dkmplayer.exe')
import os
os.popen('taskkill /im kmplayer.exe')
Одна строка читается и он останавливается , что надо сделать что б были прочитаны обе строки друг за другом ?
p.s Учусь второй день сильно не ругайте нубаса)
Как закрывать приложения и кона запущенные из под Питона ?
Справка по subprocess есть на русском. НИЧЕГО сложного.
Если вы второй день учитесь, то какого хрена полезли туда куда вам через неделю можно суваться? Это был риторический вопрос
Читайте также: