Programing

Python 스크립트 종료

crosscheck 2020. 9. 28. 08:18
반응형

Python 스크립트 종료


die()스크립트를 일찍 중지하는 PHP 명령을 알고 있습니다.

파이썬에서 어떻게 할 수 있습니까?


import sys
sys.exit()

sys모듈 문서의 세부 사항 :

sys.exit([arg])

Python을 종료합니다. 이는 SystemExit예외 를 발생시켜 구현 되므로, try문의 finally 절에서 지정한 정리 작업 이 적용되며 외부 수준에서 종료 시도를 가로 챌 수 있습니다.

선택적 인수 arg 는 종료 상태 (기본값은 0)를 제공하는 정수이거나 다른 유형의 객체 일 수 있습니다. 정수인 경우 0은 "성공적인 종료"로 간주되고 0이 아닌 값은 쉘 등에 의해 "비정상적인 종료"로 간주됩니다. 대부분의 시스템에서는 0-127 범위에 있어야하며 그렇지 않으면 정의되지 않은 결과가 생성됩니다. 일부 시스템에는 특정 종료 코드에 특정 의미를 할당하는 규칙이 있지만 일반적으로 개발되지 않았습니다. Unix 프로그램은 일반적으로 명령 줄 구문 오류에 대해 2를 사용하고 다른 모든 종류의 오류에 대해 1을 사용합니다. 다른 유형의 객체가 전달되면 None은 0을 전달하는 것과 동일하며 다른 객체는 인쇄되어 stderr종료 코드 1이됩니다. 특히 sys.exit("some error message")오류가 발생했을 때 프로그램을 종료하는 빠른 방법입니다.

때문에 exit()궁극적으로 "전용"예외가 발생 메인 쓰레드에서 호출 및 예외가 차단되지 않을 때, 그것은 단지 프로세스를 종료합니다.

이것이 종료하는 '좋은'방법입니다. 아래의 @ glyphtwistedmatrix 는 '하드 종료'를 원할 경우 os._exit ( errorcode )를 사용할 수 있지만 어느 정도는 OS에 따라 다르지만 ( 예를 들어 창에서 오류 코드를받지 않을 수 있음) 지적합니다. 프로세스가 죽기 전에 인터프리터가 정리를하지 못하도록하기 때문에 확실히 덜 친숙합니다.


Python 스크립트를 조기에 종료하는 간단한 방법은 내장 함수 quit ()를 사용하는 것입니다. 라이브러리를 가져올 필요가 없으며 효율적이고 간단합니다.

예:

#do stuff
if this == that:
  quit()

또 다른 방법은 다음과 같습니다.

raise SystemExit

일반적으로 sys.exit다른 코드보다 "친숙"하기 때문에 선호해야하지만 실제로는 예외를 발생시키는 것뿐입니다.

프로세스를 즉시 종료해야하고를 catch하는 예외 처리기 내부에있을 수있는 SystemExit경우 다른 함수가 있습니다.이 함수 os._exit는 C 수준에서 즉시 종료되고 정상적인 분해를 수행하지 않습니다. 통역사의; 예를 들어, "atexit"모듈에 등록 된 후크는 실행되지 않습니다.


간단하게 사용할 수도 있습니다 exit().

있다는 사실을 숙지 sys.exit(), exit(), quit(), 및 os._exit(0) 죽일 파이썬 인터프리터를. 따라서에 의해 다른 스크립트에서 호출 된 스크립트에 나타나면 execfile()두 스크립트의 실행이 모두 중지됩니다.

이를 방지하려면 " execfile로 호출 된 스크립트 실행 중지 "를 참조하십시오 .


난 그냥 multithreadded 응용 프로그램을 작성할 때 사실을 발견했습니다 raise SystemExitsys.exit()모두는 실행중인 스레드를 죽인다. 반면에 os._exit()전체 프로세스를 종료합니다. 이것은 여기서 논의 되었습니다.

아래 예에는 2 개의 스레드가 있습니다. 케니와 카트 맨. Cartman은 영원히 살기로되어 있지만 Kenny는 재귀 적으로 호출되어 3 초 후에 죽어야합니다. (재귀 호출이 최선의 방법은 아니지만 다른 이유가 있습니다)

Kenny가 죽을 때 Cartman도 죽기를 원하면 Kenny는으로 가야합니다 os._exit. 그렇지 않으면 Kenny 만 죽고 Cartman은 영원히 살 것입니다.

import threading
import time
import sys
import os

def kenny(num=0):
    if num > 3:
        # print("Kenny dies now...")
        # raise SystemExit #Kenny will die, but Cartman will live forever
        # sys.exit(1) #Same as above

        print("Kenny dies and also kills Cartman!")
        os._exit(1)
    while True:
        print("Kenny lives: {0}".format(num))
        time.sleep(1)
        num += 1
        kenny(num)

def cartman():
    i = 0
    while True:
        print("Cartman lives: {0}".format(i))
        i += 1
        time.sleep(1)

if __name__ == '__main__':
    daemon_kenny = threading.Thread(name='kenny', target=kenny)
    daemon_cartman = threading.Thread(name='cartman', target=cartman)
    daemon_kenny.setDaemon(True)
    daemon_cartman.setDaemon(True)

    daemon_kenny.start()
    daemon_cartman.start()
    daemon_kenny.join()
    daemon_cartman.join()

from sys import exit
exit()

매개 변수로 OS로 반환되는 종료 코드를 전달할 수 있습니다. 기본값은 0입니다.


I'm a total novice but surely this is cleaner and more controlled

def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        return
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

Program terminated

than

import sys
def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        sys.exit()
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

Program terminated Traceback (most recent call last): File "Z:\Directory\testdieprogram.py", line 12, in main() File "Z:\Directory\testdieprogram.py", line 8, in main sys.exit() SystemExit

Edit

The point being that the program ends smoothly and peacefully, rather than "I'VE STOPPED !!!!"


In Python 3.5, I tried to incorporate similar code without use of modules (e.g. sys, Biopy) other than what's built-in to stop the script and print an error message to my users. Here's my example:

## My example:
if "ATG" in my_DNA: 
    ## <Do something & proceed...>
else: 
    print("Start codon is missing! Check your DNA sequence!");
    exit(); ## as most folks said above

Later on, I found it is more succinct to just throw an error:

## My example revised:
if "ATG" in my_DNA: 
    ## <Do something & proceed...>
else: 
    raise ValueError("Start codon is missing! Check your DNA sequence!");

참고URL : https://stackoverflow.com/questions/73663/terminating-a-python-script

반응형