ArcMap의 Python 창에서 명령문 실행을 수동으로 중단하는 방법은 무엇입니까?


20

ArcMap의 Python 콘솔에서 장기 실행 프로세스의 실행을 어떻게 중단합니까?

예를 들어, 일단 시작되면 아래와 같은 긴 반복을 어떻게 중단합니까?

for i in range(1, 50):
  # some long process which takes over a minute to complete

콘솔 창에 입력 한 코드가 실행되는 동안 키보드 조합을 누르거나 버튼 또는 유사한 것을 클릭하여 언제든지 프로세스를 중지하고 싶습니다 .


1
휴식이란 말은 강제로 종료한다는 의미입니까?
RK

@ RK : 예, 원할 때마다 강제로 종료하고 싶습니다. (1) 원하지 않는 출력을 보았고 (2) 잘못된 처리 순서를 입력했습니다 (3) 다른 이유.
Alex Essilfie

2
가능한 단축키를 확인했습니다. Ctrl + Z, Ctrl + C 및 ESC가 모두 작동하지 않습니다. 원하는 것을 달성하기 위해 IDLE 또는 다른 IDE를 사용해야 할 수도 있습니다.
RK

윈도우 머신에 대한 LX 터미널에서 사용하는 Ctrl 키를 + Z

@anurag : 당신의 제안에 감사하지만 그것이 내가 원하는 것이 아닙니다. 내가 원하는 것은 IDE 또는 터미널을 사용하지 않고 ArcMap의 Python 창에서 실행을 중지하는 것입니다. 터미널이나 IDE에서 실행을 종료하는 방법을 이미 알고 있습니다.
Alex Essilfie

답변:


14

방금 테스트했지만 ESC 작동하지 않습니다. ArcGIS가 잠시 정지 한 다음 계속됩니다. ArcGIS Python 콘솔에서 일단 실행되면 강제 종료하는 방법이 없습니다. 파이썬 프로세스가 나타나지 않기 때문에 작업 관리자를 사용하여 죽일 수 없습니다.

실제로 강제 종료하려면 ArcGIS Python 콘솔에서 수행하지 않고 IDLE과 같은 IDE를 사용하는 것이 좋습니다. 예를 들어 IDLE에서 Ctrl+ Z또는 Ctrl+ C를 사용 하여 실행을 종료 할 수 있습니다 .


1
ArcGIS Pro Python 창에서는 ArcGIS 10.X 창이 할 수없는 기술적 한계로 인해 실행 중 Python 코드를 중지 할 수 있습니다.
Jason Scheirer

9

이것이 내가 사용하는 방법입니다.

  • kill_processx.py라는 작은 파이썬 스크립트를 만듭니다.
  • kill_processx를 실행하면 stop_processx.txt라는 작은 테스트 파일이 생성됩니다.
  • 기본 프로그램의 루프 상단 또는 하단에서 stop_processx.txt가 존재하는지 확인하십시오.
  • 존재하는 경우 필요한 정리 루틴을 실행 한 다음 정상적으로 중지하십시오.
  • stop_processx.txt 파일을 삭제하십시오.

kill_processx.py 파일의 예 :

import os 
nameof_killfile="stop_processx.txt"

if os.path.exists(nameof_killfile): 
    os.remove(nameof_killfile) 
else:
    killit=open(nameof_killfile,"w") 
    killit.close()

"kill_processx.py"라는 스크립트는 무엇입니까?
Aaron

1
kill_process 스크립트는 올바른 폴더에 올바른 이름의 빈 txt 파일을 만듭니다.
mhoran_psprep

게시물에 샘플 스크립트를 포함시켜 OP의 질문에 어떻게 도움이 될 수 있는지 더 잘 알 수 있습니까?
Aaron

@ mhoran_psprep : RK의 대답 은 질문에 대답 하기 때문에 받아 들였습니다 (IDE가 아닌 한 불가능합니다). 해결 방법으로 +1 앞으로 구현할 것 같습니다.
Alex Essilfie

4

무차별 대입 전술을 사용하여 강제로 종료하는 것은 좋지 않습니다. 오히려 @Aragon이 지적했듯이 특정 조건이 충족되지 않으면 스크립트에 오류 처리를 추가하여 구성 요소를 격리하거나 스크립트를 중지해야합니다. @RK가 지적했듯이 ArcGIS python 콘솔은 복잡한 스크립트를 실행하는 데 쓸모가 없습니다. 실제로 IDLE , pythonwin , pyscripter 또는 다른 IDE 호스트와 같은 간단한 작업을 위해 예약해야합니다 . 귀하의 질문과 관련된 토론은 다음과 같습니다.

오류 메시지가 표시되지 않고 arcpy 스크립트에서 sys.exit (0)을 사용하여 일찍 종료하려면 어떻게해야합니까?

파이썬 스크립트 종료

파이썬에서 명령이나 프롬프트를 멈추는 방법?


1
물론 PyScripter와 같은 IDE를 사용하면 "for ... range"문에 "중단 점"을 추가하고 "디버그 모드"에서 스크립트를 실행하면 IDE가 자동으로 "일시 중지"됩니다 반복 프로세스 중에 지시하고 이미 처리 된 결과를 검사 할 수 있습니다.
RyanDalton

2

10.4에서 일하고 여기에 이미지 설명을 입력하십시오있는데 스크립트가 실행되는 동안 닫기 X 를 클릭 할 수 있음을 발견했습니다 . ArcMap은 작업을 취소 할 것인지 묻습니다.

여기에 이미지 설명을 입력하십시오

예를 클릭합니다. 그런 다음 ArcMap은 종료하기 전에 저장할 것인지 묻습니다. 취소를 클릭합니다. 스크립트가 키보드 인터럽트를 발생시킵니다.


이 일련의 동작을 트리거하기 위해 어떤 닫기 버튼을 클릭합니까?
Alex Essilfie

대부분의 (모든?) Windows 소프트웨어의 오른쪽 상단에있는 빨간색 Windows X. 내 대답에서 작은 그림을보십시오.
Emil Brundage

1

pythonic 방식으로 해결하려면 다음을 시도하십시오.

import sys
sys.exit()

또는 사용 :

raise SystemExit()

상세히:

import time
import sys

sTime= time.time()

if time.time() - sTime > 60:
   sys.exit()

나는 그것이 당신에게 도움이되기를 바랍니다 ...


아니요, 이것은 내가 원하는 것이 아닙니다 . 콘솔 창에 입력 한 코드가 실행되는 동안 키보드 조합을 누르거나 버튼 또는 유사한 것을 클릭하여 언제든지 프로세스를 중지하고 싶습니다 . 나는 알고 sys.exit()있지만 루프 또는 유사하게 긴 프로세스가 실행될 때 작동하지 않습니다.
Alex Essilfie

@ Upvoters : 이것은 내가 찾고있는 대답 이 아닙니다 . 내 질문에 대답하지 않습니다 . 키보드 조합을 누르거나 버튼 또는 유사한 것을 클릭하여 명령문 실행 (일반적으로 반복)을 중단하고 싶습니다.
Alex Essilfie

1

적어도 ArcMap 10.4에서는이를 수행 할 수 있습니다. "결과"창이 보이는지 확인하십시오. ( "Geoprocessing"에서 찾을 수없는 경우). 이제 명령을 실행하면이 창에 표시됩니다. 마우스 오른쪽 버튼으로 클릭하고 "취소"를 누르십시오.



0

유휴를 사용하여 "pass."라는 한 줄을 포함하는 "stop.py"라는 파일이 있습니다. 다른 .py 스크립트가 실행되는 동안이 파일을 IDLE로 열어 두십시오. "stop.py"창에서 F5를 클릭하면 IDLE이 재설정됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.