Рубрики
Без рубрики

Как остановить сценарий Python (клавиатура и программно)

https://youtu.be/98nlj9dpx7e Зачем остановить сценарий Python? В качестве языка программирования Python предназначен для чтения строки кода по линии и остановится в конце сценария по умолчанию – так почему нам нужно было остановить его? Хотя есть ряд причин, по которым это может потребоваться, они в основном попадают в две отдельные категории: … Как остановить сценарий Python (клавиатура и программно) Подробнее “

Автор оригинала: Rikesh Nichani.

Зачем остановить сценарий Python?

В качестве языка программирования Python предназначен для чтения строки кода по линии и остановится в конце сценария по умолчанию – так почему нам нужно было остановить его?

Пока есть ряд причин, по которым это может потребоваться, они в основном падают на две отдельные категории:

  1. Вы сделали ошибку с вашим кодом, например, программа продолжает работать в бесконечном или, по крайней мере, очень длинный, цикл (любой, кто использовал Python, возможно, может относиться к этому!)
  2. Сам код правильный, но вы хотите остановить свой скрипт, если определенные условия либо имеют или не были выполнены.

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

Клавиатура останавливается

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

Начать с того, что давайте собрали небольшой сценарий, который даст нам проблему, которую мы стремимся решить, и называть это Test.py и сохранить его в рабочем каталоге C: \ Пользователи \ Rikesh :

x = 1
while x >= 1:
    print (x)
    x = x +1 

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

C:\Users\Rikesh> test.py
1
2
3
4
..

Прерывание клавиатуры

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

Ctrl + C

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

..
    2396
    2397
2398
Traceback(most recent call last):
      File "C:Users\Rikesh ..   "
KeyboardInterrupt

2.2 Ctrl + пауза/перерыв

Хотя вышеизложенное работает хорошо с нашим простым примером кода, есть времена, когда это может быть не так. Например, наш скрипт мог бы явно остановить это от работы, специально исключая клавиатуру I.E, кроме KeyboardInterTrupt, или он может даже быть исключен с нормальным, кроме синтаксиса. Например:

x = 1
while x >= 1:
    try: 
        print (x)
        x = x +1 
    except:
pass 

Влияние кроме:, в этом примере состоит в том, чтобы отрицать нашу клавиатуру врачуса – будь умышленно или нет.   Так что теперь, когда мы запускаем вышеупомянутый скрипт через нашу командную строку Windows, наш сочетаний Ctrl + C неэффективна, а цифры продолжают печатать.

C:\Users\Rikesh> test.py
1
2
3
4
5
6
..

В этом случае мы можем использовать Ctrl + Pause/Break, которая является гораздо более мощным способом остановки нашего сценария.

..
    2396
    2397
    ˄c
    C:\Users\Rikesh>

Не только это останавливает сценарий, но как это не KeyboardInterrupt Ярлык Мы не получаем то же сообщение от нашего переводчика. Мы просто возвращаемся в командную строку.

Программные остановки

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

Программно в процессе развития

При запуске Python модуль сайта автоматически загружен автоматически, и это по умолчанию поставляется с объектами QUIT () и EXIT (). Эти два объекта работают так же, как следует, и, поскольку их имена предлагают можно использовать для остановки наших скриптов:

x = 1
while x >= 1:
    print (x)
    x = x +1
    if x >= 5:
        quit()
x = 1
while x >= 1:
    print (x)
    x = x +1
    if x >= 5:
        exit()

В обоих случаях, если мы запустим код выше из нашего интерпретатора, программа автоматически остановится и выйдет/выходит, как только X попадет до 5.

C:\Users\Rikesh> test.py
1
2
3
4
C:\Users\Rikesh>

Однако, пожалуйста, обратите внимание как Quit () и Выход () предназначены только для использования в интерпретатере Python, где был загружен модуль сайта. Никто из них не считается подходящим для использования в производственном коде, то есть в реальной ситуации, поскольку мы не контролируем, как и если модуль сайта загружен. По этой причине оба из этих вариантов следует использовать только в целях развития и в переводчике Python.

Программно в производственном коде

Так что теперь давайте посмотрим на то, как мы можем остановить наши сценарии бегать в производственном коде. Чтобы уточнить, этим мы имеем в виду код, который готов к отправке клиенту/конечным пользователю. Он был отлажен и хорошо структурирован и хорошо документирован.

Использование sys.exit ()

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

import sys

x = 1
while x >= 1:
    print (x)
    x = x +1
    if x >= 5:
        sys.exit()

Теперь, запустив скрипт, мы получаем следующий вывод:

C:\Users\Rikesh> test.py
1
2
3
4
C:\Users\Rikesh>

Хотя конечный результат такой же, как и раньше, с Quit () и Выход () Этот метод считается хорошей практикой и хорошим кодированием. Поскольку мы импортировали модуль SYS в нашему сценарию, он всегда будет доступен, когда сценарий работает ..

Поднять системуExit.

Это интересно, потому что он делает все, что sys.exit () Есть ли, похоже, не используется или не считается наилучшей практикой. Это имеет преимущество, что не требует никакого импорта и всех sys.exit () Операция делает, как мы видели в предыдущем разделе, это поднять SystemExit Исключение в любом случае. Поэтому есть аргумент, что, используя этот метод, мы делаем наш очиститель кода и более эффективным:

x = 1
while x >= 1:
    print (x)
    x = x +1
    if x >= 5:
        raise SystemExit 

И когда мы запускаем код, вывод выглядит следующим образом:

C:\Users\Rikesh> test.py
1
2
3
4
C:\Users\Rikesh>

Использование OS._EXIT ()

Последний метод мы рассмотрим OS._EXIT () который является частью Python ОС Модуль, обеспечивающий функции для взаимодействия непосредственно с операционной системой. Этот метод в основном призывает к немедленному прекращению программы, а не повысить исключение, так что, возможно, самый экстремальный из всех, как мы видели.

Поэтому практическое использование ограничено очень конкретными случаями, поэтому для целей настоящей статьи мы сосредоточимся на том, как его использовать, а не почему и когда. Во-первых, мы должны импортировать ОС Модуль для него для работы, и в отличие от других методов, которые мы видели, мы не можем пройти пустой параметр. Это означает, что нам нужно указать состояние выхода, которое обычно является целочисленным значением, причем 0 – обычный выход. Если предположить, что это так, как наш код будет выглядеть так:

import os 
x = 1
while x >= 1:
    print (x)
    x = x +1
    if x >= 5:
        os._exit(0)

И когда мы запускаем код, вывод выглядит следующим образом:

C:\Users\Rikesh> test.py
1
2
3
4
C:\Users\Rikesh>

Резюме

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

Даже в различных программных «остановках» наиболее подходящий метод действительно будет зависеть от того, хотите ли вы написать код для разработки или производства. В то время как практическое использование OS._EXIT () ограничен, sys.exit () Наверняка считается лучшей практикой с производственным кодом. На мой взгляд, однако, есть сильный случай для использования Поднять системуExit подход. Он выглядит самым чистым и наиболее логичным для всех методов и менее зависит от внешних библиотек – все одинаковые атрибуты, которые делают Python такой универсальный язык.