2010-08-10 4 views
3

나는 내 코드가 있으며 무한대로 실행됩니다. 내가 원하는 것은 유닉스 명령 창에서 사용자가 ctrl C를 입력하면 프로그램이 현재 루프를 끝내고 루프에서 빠져 나오길 원한다는 것입니다. 그래서 깨기를 원하지만 현재 루프를 끝내기를 원합니다. ctrl C ok를 사용하고 있습니까? 다른 입력을 봐야합니까?무한대 루프 및 사용자 입력을 종료로

답변

3

원하는대로 올바르게 정확하게하려면 다소 복잡합니다.

기본적으로 Ctrl-C를 트랩하고 플래그를 설정 한 다음 해당 플래그를 확인할 루프 (또는 끝)가 시작될 때까지 계속 진행하고 싶습니다. 이것은 signal 모듈을 사용하여 수행 할 수 있습니다. 다행히도 누군가 이미 코드를 작성 했으므로 예제 코드 linked을 사용할 수 있습니다.

편집이 아래에 귀하의 의견을 바탕으로, 클래스 BreakHandler의 일반적인 사용은 다음과 같습니다

big_set에서 x의
ih = BreakHandler() 
ih.enable() 
for x in big_set: 
    complex_operation_1() 
    complex_operation_2() 
    complex_operation_3() 
    # Check whether there was a break. 
    if ih.trapped: 
     # Stop the loop. 
     break 
ih.disable() 
# Back to usual operation 
+0

: complex_operation_1() complex_operation_2() complex_operation_3() # 확인 여부 휴식이 있었다. ifh.trapped : # 루프를 중지하십시오. 휴식 ih.disable() 위로 일반적인 운영에 # ... 그래서이 부분에 대해 내가 할 필요가있는 유일한 것은 ih.trapped 경우가 입니다 시작합니다 : # 루프를 중지합니다. 휴식 코드 ih.disable() 다음 코드는? – Yuki

+0

@Yuki : 주석에 코드를 추가하는 것은 파이썬 코드로 엉망이되는 포맷을 잃어 버렸지 만, 당신이 옳은 것처럼 보입니다. 'bh = BreakHandler(); 할 필요가있다. 물론 루프 앞에 bh.enable()을 써야합니다. –

+0

나는이 있습니다 IH = BreakHandler() ih.enable() 동안 (사실) (내가 더 좋은 형식으로 여기에 코드를 설정하는 방법 순간 모르는) : * 무엇 이건 * 경우 ih.trapped : break ih.disable() – Yuki

관련 문제