2010-01-20 7 views

답변

7

가장 좋은 방법은 while True:을 사용하지 않도록 스크립트를 다시 작성하는 것입니다.

슬프게도, 이것을 끝내는 좋은 방법을 추측하는 것은 불가능합니다.

Linux 신호를 사용할 수 있습니다.

잠시 후 타이머를 사용하고 중지 할 수 있습니다.

dostuff 값을 반환하고 값이 False이면 중지 할 수 있습니다.

로컬 파일을 검사하고 파일이 존재하면 중지 할 수 있습니다.

FTP 사이트에서 원격 파일을 검사하여 파일을 중지 할 수 있습니다.

루프가 멈추거나 멈추지 않는지 여부를 나타내는 정보가있는 HTTP 웹 페이지를 확인할 수 있습니다.

세마포어 또는 공유 메모리와 같은 OS 관련 항목을 사용할 수 있습니다.

+0

빠른 답변을 주셔서 감사합니다. 거기에 대해 생각해 보지 못한 아이디어가 있습니다. – James

5

나는 가장 우아한 될 것이라고 생각 :

keep_running = true 
while keep_running: 
    dostufF() 

과에 더 이상 다음 while 루프의 끝을 계속 실행하고 싶어하고, 모든 것이 잘 정리 때마다 다음 dostuff()keep_running = false을 설정할 수 있습니다.

2

콘솔 응용 프로그램이고 Ctrl + C를 눌러 종료하면 문제가 해결 될 수 있습니까?

try: 
    while True: 
    doStuff() 
except KeyboardInterrupt: 
    doOtherStuff() 

은 그 접근 방식에 문제가 정확히 언제 어디서 doStuff에서 실행이 종료되는 모든 제어를하지 않을 것이라고 추측한다.

7

그리고 저는 파이썬 스크립트 외부에서 살해한다는 것을 의미합니다.

내가 가장 쉬운 찾은 방법

@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을 제거 종료하고 응용 프로그램이 당신을 위해 종료해야합니다. 하나만 종료해야하는 경우 한 번에 실행되는 동일한 스크립트의 여러 인스턴스에도이 기능을 사용할 수 있습니다. 그리고 자체적으로 정리를 시도합니다 ....

-1

신호 모듈은 신호를 트랩하고 그에 따라 반응 할 수 있습니까?

관련 문제