파이썬 종료 명령-왜 그렇게 많이 사용합니까?


489

파이썬은 스크립트 실행을 중지하기 위해 많은 다른 명령을 지원하는 것 같습니다.
내가 찾은 선택 사항은 다음과 같습니다 quit(), exit(), sys.exit(),os._exit()

내가 놓친 적이 있습니까? 그들 사이의 차이점은 무엇입니까? 언제 사용 하시겠습니까?


1
당신은 놓쳤다os.abort()
Daleks

답변:


764

그들에 대한 정보를 제공하겠습니다.

  1. quit()단순히 SystemExit예외 를 제기합니다 .

    또한 인쇄하면 다음과 같은 메시지가 나타납니다.

    >>> print (quit)
    Use quit() or Ctrl-Z plus Return to exit
    >>>
    

    이 기능은 Python을 모르는 사람들을 돕기 위해 포함되었습니다. 결국 초보자가 파이썬을 종료하려고 시도 할 가능성이 가장 높은 것 중 하나는 입력하는 것입니다 quit.

    그럼에도 불구하고, quit해야 하지 생산 코드에서 사용할 수. site모듈이로드 된 경우에만 작동하기 때문 입니다. 대신이 함수는 인터프리터에서만 사용해야합니다.

  2. exit()에 대한 별명입니다 quit(또는 그 반대). 파이썬을보다 사용자 친화적으로 만들기 위해 함께 존재합니다.

    또한 인쇄시 메시지도 표시됩니다.

    >>> print (exit)
    Use exit() or Ctrl-Z plus Return to exit
    >>>
    

    그러나 같은 quit, exit생산 코드에 사용하는 것이 나쁜 것으로 간주되며 인터프리터에서 사용하기 위해 예약해야한다. site모듈에 의존하기 때문 입니다.

  3. sys.exit()또한 SystemExit예외를 발생시킵니다. 이는 해당 측면에서 quit와 동일하고 동일하다는 것을 의미합니다 exit.

    그러나이 두 가지와 달리 sys.exit프로덕션 코드에서 사용하는 것이 좋습니다. 때문이다 sys모듈은 항상있을 것입니다.

  4. os._exit()정리 핸들러, 플러시 stdio 버퍼 등을 호출하지 않고 프로그램 종료합니다 . 따라서 종료하는 표준 방법이 아니며 특수한 경우에만 사용해야합니다. 이들 중 가장 일반적인 것은에 의해 생성 된 자식 프로세스에 os.fork있습니다.

    주어진 네 가지 방법 중이 방법 만 수행하는 방식이 고유합니다.

요약하면, 네 가지 방법 모두 프로그램을 종료합니다. 그러나 처음 두 개는 프로덕션 코드에서 사용하기에 좋지 않은 것으로 간주되고 마지막 두 개는 특수 시나리오에서만 사용되는 비표준적이고 더러운 방법입니다. 따라서 프로그램을 정상적으로 종료하려면 세 번째 방법을 사용하십시오 sys.exit.


또는 내 의견으로는 더 나은 sys.exit것은, 배후에서 직접 수행 하고 실행하는 것입니다.

raise SystemExit

이렇게하면 sys먼저 가져올 필요가 없습니다 .

그러나이 선택은 단순히 스타일 중 하나이며 순전히 당신에게 달려 있습니다.


2
그러나 ipython 쉘에서, quit그리고 exit동안 쉘을 종료 sys.exit하지 않습니다.
Lee

5
sys.exit()신뢰할 수있는 방법은 아닙니다. 스레드 내부에서 호출되면 기본 스레드에 있지 않으면 해당 스레드 만 종료됩니다. 호출이 주 스레드에 없었기 때문에 프로그램이 계속되는 경우가 많으며 특히 일부 인터프리터가 스레드 호출을 보이지 않게 할 수 있습니다.
Elliot

1
나는 end명령 을 추가하기 위해 투표합니다 raise SystemExit. BASIC 에서처럼 왜 그렇게 간단한 것을 할 수 없는지 보지 마십시오.
Brian Burns

6
@BrianBurns : 전용 구문을 추가하고 다른 키워드를 예약 할 가치가 없습니다. 이것은 print명령문에서 함수로 변경된 이유와 유사 합니다. 구문을 추가하는 것은 쉽지만 그렇게하는 데에는 복잡한 비용이 있습니다.
user2357112는

1
전화 할 때 괄호가 중요 sys.exit()합니까?
lindhe

99

함수 * quit() , exit()sys.exit()함수는 같은 방식으로 SystemExit예외를 발생시킵니다. 즉 제외하고 그래서 진짜 차이가없고, sys.exit()항상 사용할 수 있지만 exit()quit()경우에만 사용할 수있는 site모듈을 가져옵니다.

os._exit()함수는 특별하며 정리 함수를 호출하지 않고 즉시 종료합니다 (예 : 버퍼를 비우지 않음). 이것은 고도로 전문화 된 유스 케이스를 위해 설계되었습니다. 기본적으로 os.fork()통화 후 아이에게만 해당됩니다 .

결론

  • REPL에서 exit()또는 사용하십시오 quit().

  • sys.exit()스크립트에서 사용 하거나 raise SystemExit()원하는 경우에 사용하십시오 .

  • os._exit()호출 한 후 종료 할 하위 프로세스에 사용하십시오 os.fork().

이들 모두는 예를 들면, 인수없이 호출 할 수 있습니다, 또는 당신은 종료 상태를 지정할 수 있습니다 exit(1)또는 raise SystemExit(1)휴대용 프로그램, 0 ~ 255 범위에서 종료 상태 코드에있는 경우를 제한됩니다 1. 주 상태 종료에 raise SystemExit(256)많은 시스템이 의지에 잘리고 프로세스는 실제로 상태 0으로 종료됩니다.

각주

* 사실, quit()exit()호출 인스턴스 개체입니다,하지만 난 그들 함수를 호출 괜찮아 생각합니다.


50

다른 출구 수단

os._exit():

  • 정리 핸들러를 호출하지 않고 프로세스를 종료하십시오.

exit(0):

  • 오류 / 문제없이 깨끗한 출구.

exit(1):

  • 문제 / 오류 / 문제가 있었으므로 프로그램이 종료됩니다.

sys.exit():

  • 시스템과 파이썬이 종료 될 때; 프로그램이 실행 된 후 사용되는 메모리가 적음을 의미합니다.

quit():

  • 파이썬 파일을 닫습니다.

요약

기본적으로 그들은 모두 똑같은 일을하지만, 당신이하는 일에 달려 있습니다.

나는 당신이 아무것도 버리지 않았다고 생각하며 quit()또는에 익숙해지는 것이 좋습니다 exit().

다음을 사용 sys.exit()하고 os._exit()당신이 큰 파일을 사용 또는 터미널 제어하기 위해 파이썬을 사용하는 주로합니다.

그렇지 않으면 주로 exit()또는을 사용하십시오 quit().


42

sys.exit 정식 종료 방법입니다.

내부적 sys.exit으로 상승 SystemExit합니다. 그러나 전화 sys.exitSystemExit직접 올리는 것보다 관용적 입니다.

os.exit 정리 핸들러를 호출하지 않고 직접 종료되는 저수준 시스템 호출입니다.

quitexit파이썬 프롬프트에서 쉬운 방법을 제공하는 유일한 존재한다. 이것은 새로운 사용자 나 실수로 Python 프롬프트를 입력 한 사용자에게 적합하며 올바른 구문을 알고 싶지 않습니다. 그들은 exit또는을 입력하려고 할 것 quit입니다. 이것은 인터프리터를 종료하지는 않지만 최소한 탈출구를 알려주는 메시지를 발행합니다.

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$

이것은 본질적으로 인터프리터 __repr__가 프롬프트에 입력 한 표현을 인터프리터가 인쇄한다는 사실을 활용하는 해킹입니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.