Как закрыть программу с помощью питона

Python – один из самых популярных языков программирования, который может использоваться для написания многих типов программ. Одна из важных особенностей любой программы – корректное завершение ее работы. В этой статье мы обсудим, какие действия могут быть выполнены при закрытии программы Python.

Зачем нужны действия при закрытии программы Python?

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

Что происходит при закрытии программы Python?

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

Взлом Пентагона через Python. Шуточное видео.

Какие действия могут быть выполнены при закрытии программы Python?

1. Закрытие соединений с базой данных.

Если ваша программа имеет соединение с базой данных, то важно убедиться, что оно будет закрыто перед завершением программы. Если соединение не будет закрыто, то это может привести к утечкам памяти, которые могут привести к аварийному завершению системы. Например, если вы используете SQLAlchemy, вы можете использовать метод dispose (), чтобы закрыть все соединения с базой данных.

2. Освобождение ресурсов.

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

3. Сохранение данных.

Если программа работает с данными, то важно убедиться, что они будут правильно сохранены перед завершением программы. Например, если вы используете XML или JSON для хранения данных, то вы можете сохранить все данные в файл перед завершением программы.

4. Завершение фоновых процессов.

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

Вот пример кода, который демонстрирует, как можно выполнить действия при завершении программы:

import atexit def goodbye(): print(«Goodbye, cruel world.») atexit.register(goodbye) print(«Hello, world!»)

Этот код при выполнении выведет на экран «Hello, world!» и зарегистрирует функцию goodbye () в качестве обработчика закрытия программы. При завершении программы функция goodbye () будет вызвана, и на экран будет выведено «Goodbye, cruel world.»

Запуск внешних приложений с помощью python

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

Похожие записи:

  1. Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие?
  2. Как с помощью цикла while() реализовать закрытие программы при вводе определенной команды через Scanner?
  3. Как при нажатии кнопки остановить вывод текста в Qlabel, а при повторном нажатии действие продолжалось?
  4. Как происходит закрытие соединения при работе с TCP?
  5. Закрытие модального окна при нажатии за его пределами

Источник: qaa-engineer.ru

Как закрыть процесс через python

Terminate multi process/thread in Python correctly and gracefully

I encountered these problems when I try to use Mesos to run my Python scripts as tasks. I found some tasks cannot finish as expect although the main process/thread is terminated.

Problem 1

Run the above code by python myscript.py , and we can see the output result is:

Читайте также:
Примеры свободно распространяемых лицензионных и условно бесплатных программ

From the result, we may find the finish of main process will not terminate its subprocesses. And the commandline is blocking until we press ctrl-c .

Solution

The solution is simple: just use the terminate() method of multiprocess.Process .

The revised code is as follows:

Problem 2

Then we replace the multiprocess.Process with threading.Thread :

Here comes the problem: There is no terminate or similar method in threading.Thread , so we cannot use the solution of first problem. Also, ctrl-c cannot break out the python process here (this seems is a bug of Python).

Solution

We can send some siginal to the threads we want to terminate. The simplest siginal is global variable:

Notice that the thread will not terminate until the t.join() is execute. (Actually, the global variable _FINISH in the thread is still ‘False’ when we set it to ‘True’ in the main thread. After we execute the t.join() , it becomes ‘True’ in the thread.)

Problem 3

This script actually can exit correctly. The threads start by the threadpool will automatically terminated when the main thread is end. However, there should be some more graceful exit method.

Python, как правильно завершить процесс .exe?

Теперь через определённое время их нужно завершить, например третий профиль, потом пятый, первый и т.д
С этим я так и не разобрался.
Разобрался как убить все процессы firefox.exe:

os.system(«taskkill /im firefox.exe»)

Но при следующем запуске, firefox пишет что не корректно была завершена работа и просит запуститься в безопасном режиме.
При alt+f4 не ругается на некорректное завершение работы.
Вопрос в том как правильно завершить что бы он не ругался?
А ещё лучше как правильно завершить определённый профиль?

  • Вопрос задан более двух лет назад
  • 2468 просмотров
  • Facebook
  • Вконтакте
  • Twitter

HemulGM

HemulGM

yupiter7575

Это плохая практика. Намного лучше делать так:

Если вы запускаете через интерпретатор пайтона, если же у вас упакованный .py файл, то лучше сделать так:

How to Close a program using python?

Is there a way that python can close a windows application (example: Firefox) ?

I know how to start an app, but now I need to know how to close one.

8 Answers 8

If you’re using Popen , you should be able to terminate the app using either send_signal(SIGTERM) or terminate() .

in windows you could use taskkill within subprocess.call :

/F forces process termination. Omitting it only asks firefox to close, which can work if the app is responsive.

Cleaner/more portable solution with psutil (well, for Linux you have to drop the .exe part or use .startwith(«firefox») :

Kill Process By PID in Python

You can kill a process via its process identifier, pid, via the os.kill() function.

In this tutorial you will discover how to kill a process via its pid.

Let’s get started.

Need To Kill a Process by PID

A process is a running instance of a computer program.

Every Python program is executed in a Process, which is a new instance of the Python interpreter. This process has the name MainProcess and has one thread used to execute the program instructions called the MainThread. Both processes and threads are created and managed by the underlying operating system.

Sometimes we may need to create new child processes in our program in order to execute code concurrently.

Python provides the ability to create and manage new processes via the multiprocessing.Process class.

You can learn more about multiprocessing in the tutorial:

In multiprocessing, we may need to kill a process by its process identifier or PID.

This may be for many reasons, such as:

  • The task executed by the process is no longer required.
  • The process has had an error or is out of control.
  • The main program is closing down due to a user request.

How can we kill a process via its pid in Python?

Run your loops using all CPUs, download my FREE book to learn how.

How To Kill a Process via its PID

You can kill a process via its pid with the os.kill() function.

The os.kill function takes two arguments, the process identifier (pid) to kill, and the signal to send to kill the process.

Читайте также:
Autoplay media studio похожие программы

The signal is a constant from the signal module, such as signal.SIGINT or signal.SIGKILL.

We need to know the pid for the process that is to be killed.

This can be retrieved from the multiprocessing.Process instance for the process via the pid attribute.

The multiprocessing.Process instance may be managed by the parent process when the child process is created, or accessed via a module function such as multiprocessing.active_children() or multiprocessing.parent_process().

You can learn more about getting the process pid in the tutorial:

The SIGINT or signal interrupt can be used to terminate the target process, which is equivalent to the user pressing CONTROL-C on the process. Alternately, the SIGKILL or signal kill process can be used to terminate the process forcefully.

The difference between SIGINT and SIGKILL is that it is possible for a process to detect and handle a SIGINT, whereas a SIGKILL cannot be handled.

Now that we know how to kill a process via pid, let’s look at some worked examples.

Confused by the multiprocessing module API?
Download my FREE PDF cheat sheet

Похожие публикации:

  1. Игра с графикой как в жизни
  2. Как сделать беспроводную мышку
  3. Как удалить все на телефоне
  4. Как рисовать на доске workrooms oculus

Источник: amdy.su

Как закрыть окно tkinter?

Как мне завершить программу Tkinter? Скажем, у меня есть этот код:

from Tkinter import * def quit(): # code to exit root = Tk() Button(root, text=»Quit», command=quit).pack() root.mainloop()

Как мне определить quit функция выхода из моего приложения?

задан 21 сен ’08, 10:09

23 ответы

Вы должны использовать destroy() закрыть окно tkinter.

from Tkinter import * root = Tk() Button(root, text=»Quit», command=root.destroy).pack() root.mainloop()

Объяснение:

root.quit()

Вышеупомянутая строка просто обходов что собой представляет root.mainloop() т.е. root.mainloop() будет по-прежнему работать в фоновом режиме, если quit() команда выполняется.

root.destroy()

В то время как destroy() команда исчезнет root.mainloop() т.е. root.mainloop() останавливается.

Так как вы просто хотите выйти из программы, вам следует использовать root.destroy() как это остановит mainloop() .

Но если вы хотите запустить какой-то бесконечный цикл, и вы не хотите разрушать окно Tk и хотите выполнить какой-то код после root.mainloop() строка, тогда вы должны использовать root.quit() . Бывший:

from Tkinter import * def quit(): global root root.quit() root = Tk() while True: Button(root, text=»Quit», command=quit).pack() root.mainloop() #do something

Если используется root.quit (), как можно позже снова найти окно в другом сценарии, который будет уничтожен (чтобы не продолжать использовать системные ресурсы)? — Радж

Ваше первое утверждение неверно. звонящий quit уничтожит все виджеты; если виджеты уничтожены, mainloop выйдет. — Брайан Окли

После некоторого исследования я считаю, что это также относится ко ВСЕМ выполняемому коду. Поэтому, если у вас есть mainloop () TKinter в сценарии командной строки, используйте root.quit (), а не root.destroy (), иначе ваш сценарий командной строки не будет продолжать выполнение кода после mainloop (). Я протестировал это, и у меня это работает (я знаю, что TKinter не предназначен для использования в таком дизайне, тем не менее, он работает) — Алекс

Это хорошее решение — много раз уничтожать окно Tkinter и запускать его много раз — Нитеш Вагмаре

def quit() root.quit()
def quit() root.destroy()

знает ли кто-нибудь, какой метод более « правильный », или один из них более читабелен, чем другой — опал

извините, я нашел ответ и просто подумал, что поделюсь им. Лучше использовать root.destroy() поскольку он завершает основной цикл программы. Видеть: http://www.daniweb.com/software-development/python/threads/66698 — опал

import Tkinter as tk def quit(root): root.destroy() root = tk.Tk() tk.Button(root, text=»Quit», command=lambda root=root:quit(root)).pack() root.mainloop()

Обычный метод выхода из программы Python:

sys.exit()

(которому вы также можете передать статус выхода) или

raise SystemExit

будет нормально работать в программе Tkinter.

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

Я думаю, вы неправильно поняли функцию выхода из Tkinter. Эта функция не требует от вас определения.

Во-первых, вы должны изменить свою функцию следующим образом:

from Tkinter import * root = Tk() Button(root, text=»Quit», command=root.quit).pack() root.mainloop()

Затем вы должны использовать суффикс ‘.pyw’ для сохранения этих файлов и дважды щелкнуть файл ‘.pyw’ для запуска вашего графического интерфейса, на этот раз вы можете завершить графический интерфейс одним нажатием кнопки, и вы также можете найти, что не будет неприятного окна DOS. (Если вы запустите файл .py, функция выхода не сработает.)

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

Подсветка в случае неразберихи .

def quit(self): self.destroy() exit()

A) destroy () останавливает основной цикл и закрывает окно, но оставляет питон запущенным

Б) exit () останавливает весь процесс

Просто чтобы уточнить, если кто-то пропустил, что делает destroy (), и OP также спросил, как «завершить» программу tkinter.

ответ дан 26 авг.

вам нужно только ввести это:

root.destroy()

и вам даже не нужна функция quit (), потому что, когда вы устанавливаете ее как команду, она выйдет из всей программы.

ответ дан 05 апр.

Если кто-то хочет привязать свою кнопку Escape к закрытию всего графического интерфейса:

master = Tk() master.title(«Python») def close(event): sys.exit() master.bind(»,close) master.mainloop()

ответ дан 29 окт ’18, 08:10

In idlelib.PyShell модуль, root переменная типа Tk определяется как глобальный

В конце PyShell.main() функция, которую он вызывает root.mainloop() функция, которая является бесконечным циклом и выполняется до тех пор, пока цикл не будет прерван root.quit() функция. Следовательно, root.quit() только прервет выполнение mainloop

Чтобы уничтожить все виджеты, относящиеся к этому окну idlelib, root.destroy() необходимо вызвать, это последняя строка idlelib.PyShell.main() функции.

ответ дан 22 мая ’17, 22:05

Вы можете использовать:

root.destroy()
root.quit()

Если это не сработает, измените root на то, что когда-либо было вашей переменной в начале вашей программы.

import tkinter main = Tk() main.destroy() main.mainloop

ответ дан 27 окт ’17, 10:10

Самый простой способ — нажать красную кнопку (крайнюю левую в macOS и крайнюю правую в Windows). Если вы хотите привязать определенную функцию к виджету кнопки, вы можете сделать это:

class App: def __init__(self, master) frame = Tkinter.Frame(master) frame.pack() self.quit_button = Tkinter.Button(frame, text = ‘Quit’, command = frame.quit) self.quit_button.pack()

Или, чтобы немного усложнить задачу, используйте обработчики протоколов и destroy() метод.

import tkMessageBox def confirmExit(): if tkMessageBox.askokcancel(‘Quit’, ‘Are you sure you want to exit?’): root.destroy() root = Tk() root.protocol(‘WM_DELETE_WINDOW’, confirmExit) root.mainloop()

Создан 24 июля ’18, 11:07

def quit1(): root.destroy() Button(root, text=»Quit», command=quit1).pack() root.mainloop()
import sys from Tkinter import * def quit(): sys.exit() root = Tk() Button(root, text=»Quit», command=quit).pack() root.mainloop()

Должен делать то, о чем вы просите.

ответ дан 04 апр.

Привет, Харрисон, у вас есть очень поздний ответ, который не дает ничего дополнительного к существующим ответам. Хотя мы очень ценим участие, ваш ответ не дает никаких дополнительных сведений. Взгляните на некоторые другие ответы, например, они отлично объясняют, почему одни подходы работают, а другие нет. — TheOneWhoPrograms

def quit(): root.destroy() menubar = Menu(root) filemenu = Menu(menubar, tearoff=0) filemenu.add_separator() filemenu.add_command(label=»Exit», command=quit) menubar.add_cascade(label=»menubarname», menu=filemenu) root.config(menu=menubar) root.mainloop()

ответ дан 18 дек ’18, 14:12

Я использую следующие коды для выхода из окна Tkinter:

from tkinter import* root=Tk() root.bind(«»,lambda q:root.destroy()) root.mainloop()
from tkinter import* root=Tk() Button(root,text=»exit»,command=root.destroy).pack() root.mainloop()
from tkinter import* root=Tk() Button(root,text=»quit»,command=quit).pack() root.mainloop()
from tkinter import* root=Tk() Button(root,text=»exit»,command=exit).pack() root.mainloop()

ответ дан 02 мая ’19, 18:05

Фрагмент кода ниже. Предлагаю небольшой сценарий.

import tkinter as tk from tkinter import * root = Tk() def exit(): if askokcancel(«Quit», «Do you really want to quit?»): root.destroy() menubar = Menu(root, background=’#000099′, foreground=’white’, activebackground=’#004c99′, activeforeground=’white’) fileMenu = Menu(menubar, tearoff=0, background=»grey», foreground=’black’, activebackground=’#004c99′, activeforeground=’white’) menubar.add_cascade(label=’File’, menu=fileMenu) fileMenu.add_command(label=’Exit’, command=exit) root.config(bg=’#2A2C2B’,menu=menubar) if __name__ == ‘__main__’: root.mainloop()

Я создал здесь пустое окно и добавил опцию меню файла в то же окно (корневое окно), где я добавляю только одну опцию выход.

Тогда просто запустить основной цикл для корень.

Попробуй сделать это один раз

root.destroy будет работать.
root.quit тоже будет работать.

В моем случае у меня было

quitButton = Button(frame, text = «Quit», command = root.destroy)

Есть простой однострочный ответ:

Писать — exit() в команде

ответ дан 21 апр.

from tkinter import * def quit(root): root.close() root = Tk() root.title(«Quit Window») def quit(root): root.close() button = Button(root, text=»Quit», command=quit.pack() root.mainloop()

ответ дан 27 дек ’20, 06:12

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа. — вода

Вам не хватает ) в вашей button а также неправильный вызов функции. — Прохладное облако

Конечно, вы можете назначить команду кнопке следующим образом, однако, если вы создаете пользовательский интерфейс, рекомендуется назначить ту же команду кнопке «X»:

def quit(self): # Your exit routine self.root.destroy() self.root.protocol(«WM_DELETE_WINDOW», self.quit) # Sets the command for the «X» button Button(text=»Quit», command=self.quit) # No ()

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

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