Python как прервать выполнение программы командой

У меня есть простой сценарий Python, который я хочу прекратить выполнять при выполнении некоторого условия.

done = True if done: # quit/stop/exit else: # do other stuff

По сути, я ищу что-то, что ведет себя эквивалентно ключевому слову ‘return’ в теле функции, что позволяет потоку кода выйти из функции и не выполнять оставшийся код.

144 2008-10-07T16:46:36+00:00 8
Редактировал вопрос 23-го мая 2017 в 10:31
Решение / Ответ
7-го октября 2008 в 5:49
2008-10-07T17:49:22+00:00
Дополнительно

Для выхода из сценария можно использовать,

import sys sys.exit()

Вы также можете предоставить выходное значение состояния, как правило, целым числом.

import sys sys.exit(0)

Выходит с нулем, что обычно интерпретируется как успех. Ненулевые коды обычно рассматриваются как ошибки. По умолчанию для выхода в ноль.

import sys sys.exit(«aa! errors!»)

Отпечатки на «АА! ошибки!» и завершается с кодом состояния 1.

Существует также для _exit() функция в модуле ОС. В СИС.выход() функция вызывает исключение SystemExit, чтобы выйти из программы, чтобы попробовать заявлений и код очистки может выполнить. ОС.Для _exit() версия не’т сделать это. Он просто завершает программу без очистки или промывки выходные буферы, поэтому он должен’т быть использованы.

#21. Операторы циклов break, continue и else | Python для начинающих

В Питон документы указывают на то, что ОС.Для _exit () — это обычный способ завершить дочерний процесс, созданный с помощью вызова ОС.вызов Fork(), так это не использовать в определенных обстоятельствах.

Источник: kzen.dev

Как остановить / прервать выполнение скрипта Python?

Я написал программу на IDLE для токенизации текстовых файлов, и она начинает токенизировать 349 текстовых файлов! Как мне это остановить? Как я могу остановить работающую программу Python?

ctrl+c должен убить его. Как вариант, kill -9 это

Многие ответы здесь зависят от платформы. Найдите свою платформу (Windows, Linux, Mac, что-нибудь еще?)

Чтобы остановить вашу программу, просто нажмите Control + C .

Этот метод работал на моем ноутбуке с Windows, но на моем рабочем столе Linux он отображался ^C в терминале, а системный монитор показал, что python все еще использует много ЦП .

Можно ли возобновить скрипт после его остановки?

Не работает, если в программе есть общее предложение except :. Исключение: перехватывает прерывание, что-то делает (или нет), а затем программа весело продолжает работу.

Читайте также:
Программы для автомобилей ВАЗ через k line

Вы также можете сделать это, если используете exit() функцию в своем коде. В идеале можно sys.exit() . sys.exit() что может завершить работу Python, даже если вы запускаете что-то параллельно через multiprocessing пакет.

Примечание: чтобы использовать sys.exit() , вы должны импортировать его: import sys

Примечание: я мог найти примеры, в которых sys.exit(1) не останавливается процесс. У меня в основном несколько потоков, и каждый из них блокирует внешние процессы, запущенные Popen . Мне нужен ядерный вариант, чтобы убить все подпроцессы, созданные процессом Python, а также сам процесс Python. Пока не нашел.

Уроки Python Как сделать задержку времени

sys.exit () не убивает процесс, но вызывает исключение SystemExit Exception, которое не останавливает выполнение, закрывая программу

Если ваша программа запущена на интерактивной консоли, нажатие CTRL + C вызовет KeyboardInterrupt исключение в основном потоке.

Если ваша программа Python его не поймает, KeyboardInterrupt Python завершится. Однако except KeyboardInterrupt: блок или что-то вроде голого except: не позволят этому механизму фактически остановить запуск скрипта.

Иногда, если KeyboardInterrupt не работает, вы можете SIGBREAK вместо этого отправить сигнал; в Windows CTRL + Pause/Break может обрабатываться интерпретатором без создания перехватываемого KeyboardInterrupt исключения.

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

В среде оболочки в стиле Unix вы можете нажать CTRL +, Z чтобы приостановить любой процесс, который в настоящее время управляет консолью. После того, как вы получите приглашение оболочки, вы можете использовать его jobs для вывода списка приостановленных заданий, и вы можете убить первое приостановленное задание с помощью kill %1 . (Если вы хотите запустить его снова, вы можете продолжить работу на переднем плане, используя fg %1 ; прочтите руководство вашей оболочки по управлению заданиями для получения дополнительной информации.)

В качестве альтернативы, в Unix или Unix-подобной среде вы можете найти PID процесса Python (идентификатор процесса) и убить его с помощью PID. Используйте что-то вроде того, ps aux | grep python чтобы найти, какие процессы Python запущены, а затем использовать kill для отправки SIGTERM сигнала.

Читайте также:
Какие есть программы ворд эксель

Команда kill в Unix отправляется SIGTERM по умолчанию, и программа Python может установить обработчик сигнала для SIGTERM использования signal модуля. Теоретически любой обработчик сигналов SIGTERM должен корректно завершать процесс. Но иногда, если процесс застревает (например, заблокирован в состоянии непрерывного сна ввода-вывода), SIGTERM сигнал не имеет никакого эффекта, потому что процесс даже не может проснуться, чтобы обработать его.

Чтобы принудительно убить процесс, который не отвечает на сигналы, вам необходимо отправить SIGKILL сигнал, который иногда называют, kill -9 потому что 9 это числовое значение SIGKILL константы. Из командной строки вы можете использовать kill -KILL (или kill -9 для краткости), чтобы отправить SIGKILL и немедленно остановить процесс.

В Windows у вас нет системы сигналов процесса Unix, но вы можете принудительно завершить запущенный процесс с помощью TerminateProcess функции. В интерактивном режиме самый простой способ сделать это — открыть диспетчер задач, найти python.exe процесс, соответствующий вашей программе, и нажать кнопку «Завершить процесс». Вы также можете использовать taskkill команду для аналогичных целей.

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

Python — прервать текущую функцию без остановки запуска tkinter mainloop

Я новичок в Python, если можно немедленно реализовать прерывание, как в следующей ситуации.

Состояние: 2 кнопки: Start и Abort

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

Кроме того, я знаю «signal.CTRL_C_EVENT / CTRL_BREAK_EVENT», но он закроет весь код, включая Tkinter mainloop .

Комментарии (3)

Что вы пробовали, почему эта попытка не удалась? Он же Минимальный, полный и проверяемый пример.

Я представляю, что вам понадобится комбинация потоковой передачи и переменной True / False, которая может быть обновлена ​​tkinter и прочитана функцией. Является ли эта функция циклом или просто выполнением ряда команд, на выполнение которых может потребоваться время?

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

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

16.07.2018 05:50

Оператор pass в Python — это простая концепция, которую могут быстро освоить даже новички без опыта программирования.

Python — самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science.

Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это

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

Ответы 1

Это зависит от того, чего вы пытаетесь достичь.

Вот пример использования метода цикла в классе. Это работает, если у вас есть какая-то функция для выполнения в цикле. Вам просто нужно поставить проверку запуска там, где она наиболее эффективна для разрыва цикла.

import tkinter as tk class Example(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.running = False tk.Button(self, text = «Start», command=self.start).pack() tk.Button(self, text = «abort», command=self.abort).pack() def start(self): self.running = True self.running_loop() def abort(self): self.running = False def running_loop(self): if self.running == True: print(«running») self.after(100, self.running_loop) else: print(«stopped») app = Example() app.mainloop()

Если вы делаете что-то более сложное, например, вам нужно выполнить какой-то сложный запрос, вам может потребоваться сделать это с помощью многопоточности, чтобы процесс был отделен от Tkinter. Причина этого в том, что Tkinter — это однопоточная программа, управляемая событиями, и не может сама многопоточность. Итак, нам нужно управлять вещами, которые нужно прервать с помощью потоковой передачи. Это немного сложнее и, возможно, потребуется от случая к случаю, поэтому мне нужно будет больше узнать о том, что вы пытаетесь сделать.

Большое спасибо, то, что я хочу сделать, немного сложно. Например, у меня есть 3 элемента теста, первый тест — time.sleep (10), второй тест — связь с продуктом через pyserial, третий тест — контроль такого инструмента, как источник питания, спектр и т. д.

Когда я тестирую 1-й элемент, если я хочу прервать это в любое время, если это возможно, когда python работает time.sleep (10)?

Не используйте сон с Tkinter. Они плохо играют. Вместо этого используйте after() .

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

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