모든 이봐, 나는 그것을 중지해야하지만이있는 경우 내가 죽이고 싶지 않는 경우이 스크립트와 통신하는 가장 좋은 방법입니다 무엇Python 프로그램을 정상적으로 종료 하시겠습니까?
while True:
doStuff()
으로 실행되는 스크립트를 수술 중?
감사합니다.
모든 이봐, 나는 그것을 중지해야하지만이있는 경우 내가 죽이고 싶지 않는 경우이 스크립트와 통신하는 가장 좋은 방법입니다 무엇Python 프로그램을 정상적으로 종료 하시겠습니까?
while True:
doStuff()
으로 실행되는 스크립트를 수술 중?
감사합니다.
가장 좋은 방법은 while True:
을 사용하지 않도록 스크립트를 다시 작성하는 것입니다.
슬프게도, 이것을 끝내는 좋은 방법을 추측하는 것은 불가능합니다.
Linux 신호를 사용할 수 있습니다.
잠시 후 타이머를 사용하고 중지 할 수 있습니다.
dostuff
값을 반환하고 값이 False
이면 중지 할 수 있습니다.
로컬 파일을 검사하고 파일이 존재하면 중지 할 수 있습니다.
FTP 사이트에서 원격 파일을 검사하여 파일을 중지 할 수 있습니다.
루프가 멈추거나 멈추지 않는지 여부를 나타내는 정보가있는 HTTP 웹 페이지를 확인할 수 있습니다.
세마포어 또는 공유 메모리와 같은 OS 관련 항목을 사용할 수 있습니다.
나는 가장 우아한 될 것이라고 생각 :
keep_running = true
while keep_running:
dostufF()
과에 더 이상 다음 while 루프의 끝을 계속 실행하고 싶어하고, 모든 것이 잘 정리 때마다 다음 dostuff()
이 keep_running = false
을 설정할 수 있습니다.
콘솔 응용 프로그램이고 Ctrl + C를 눌러 종료하면 문제가 해결 될 수 있습니까?
try:
while True:
doStuff()
except KeyboardInterrupt:
doOtherStuff()
은 그 접근 방식에 문제가 정확히 언제 어디서 doStuff에서 실행이 종료되는 모든 제어를하지 않을 것이라고 추측한다.
그리고 저는 파이썬 스크립트 외부에서 살해한다는 것을 의미합니다.
내가 가장 쉬운 찾은 방법
은@atexit.register
def cleanup()
sys.unlink("myfile.%d" % os.getpid())
f = open("myfile.%d" % os.getpid(), "w")
f.write("Nothing")
f.close()
while os.path.exists("myfile.%d" % os.getpid()):
doSomething()
그런 다음 스크립트가 단지 myfile.xxx을 제거 종료하고 응용 프로그램이 당신을 위해 종료해야합니다. 하나만 종료해야하는 경우 한 번에 실행되는 동일한 스크립트의 여러 인스턴스에도이 기능을 사용할 수 있습니다. 그리고 자체적으로 정리를 시도합니다 ....
신호 모듈은 신호를 트랩하고 그에 따라 반응 할 수 있습니까?
빠른 답변을 주셔서 감사합니다. 거기에 대해 생각해 보지 못한 아이디어가 있습니다. – James