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 SystemExit와 sys.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
'Programing' 카테고리의 다른 글
| Entity Framework와 LINQ to SQL (0) | 2020.09.29 |
|---|---|
| “POSIX”의 의미는 무엇입니까? (0) | 2020.09.29 |
| % ~ dp0은 무엇을 의미하며 어떻게 작동합니까? (0) | 2020.09.28 |
| What does in XML mean? (0) | 2020.09.28 |
| Java에서 JSON을 구문 분석하는 방법 (0) | 2020.09.28 |