2011-09-23 7 views
3

저는 파이썬으로 작업 중이며 코드 줄을 실행하려고 시도하고 실행 한 후 sys.exit()에 "exit"스크립트를 호출하려고합니다. 그러나 위의 코드 줄이 실행되기 전에 sys.exit()이 실행되고있는 것으로 보입니다. 아래는 구현하려는 코드입니다.Python sys.exit() 도움이 필요하십니까?

if something == True: 
    self.redirect('http://www.google.com/') 
    sys.exit() 

스크립트가 리디렉션되기 전에 종료되었습니다. 리디렉션을 완료 한 다음 sys.exit()를 실행해야합니다. 다른 코드가 구현되기 때문에 sleep 명령을 사용할 수 없습니다. 아무도 나에게/해결이 문제를 해결하는 방법으로 도움을 줄 수 있습니까?

+1

'sys.exit()'가 실행되기 전에'self.redirect()'메소드가 실행되고 있음을 보장합니다. 문제는'self.redirect()'메소드의 ** 효과 **가 보이지 않는다는 것입니다. 추측 할 수는 있지만 실제로'self.redirect()'메소드가하는 일에 대한 정보가 없으면 대답 할 방법이 없습니다. –

답변

7

self.redirect()에는 버퍼링 또는 비동기가있을 수 있습니다. print 다음에 sys.exit() 다음에 유사한 문제가 자주 발생하여 print 출력이 버퍼링 된 다음 처리중인 출력 버퍼가 플러시되기 전에 프로세스가 종료됩니다.

버퍼를 비우거나 비동기 작업이 완료 될 때까지 대기하여이 문제를 해결할 수 있습니다.

질문에서 명확하지 않은 무슨 마법 redirect하고있다.

+0

버퍼를 플러시하려고 시도했지만 불행히도 작동하지 않습니다./ – JPapez

+1

self.redirect는 무엇을합니까? 그것이 실행되었다고 당신 자신에게 확신시키기 위해 어떤 증거를 기대합니까? –

1

atexit 모듈을 사용하여 sys.exit()가 호출되기 직전에 실행될 정리 기능을 등록 해보십시오.

는 정리 함수로 리디렉션 기능을 등록하려면 :

import atexit 
atexit.register(redirect, 'http://www.google.com') 

참고 : 리디렉션 함수에 전달 된 인수는 함수 객체 이후에 포함되어 있습니다. 여기에 괄호는 필요하지 않습니다. 왜냐하면 실제로 함수를 호출하지 않고 함수 객체를 전달하기 때문입니다.

또한 리디렉션 방식이 제대로 작동하지 않는 경우에도 도움이되지 않습니다. 리디렉션 메서드가 파이썬 인터프리터에서 명시 적으로 호출하여 작동하는지 확인합니다.

관련 문제