2009-12-01 3 views
1

이전 질문을 다시 말해 보겠습니다. 방금 ​​Python을 스크립트 언어로 사용하여 ArcGIS에서 도구를 만들었습니다. 이 도구는 subprocess.popen을 사용하여 외부 프로그램을 실행 (실행)합니다. ArcGIS에서 도구를 실행하면 다음과 같은 창이 나타납니다. 내가 명령 창에서 같은 프로그램을 실행하면파이썬 인쇄 버퍼링

# Import system modules 
import sys, string, os, arcgisscripting, subprocess 
# Create the Geoprocessor object 
gp = arcgisscripting.create() 
# Read the parameter values: 
# 1: input workspace 
prj_fld = gp.GetParameterAsText(0) 
Flow_bat = gp.GetParameterAsText(1) 
os.chdir(prj_fld) 
p=subprocess.Popen(Flow_bat,shell=True,stdout=subprocess.PIPE) 
stdout_value = p.communicate()[0] 
print '\tstdout:', repr(stdout_value) 

을 다음과 같이

Executing: RunFLOW C:\FLOW C:\FLOW\FLW.bat 
Start Time: Mon Nov 30 16:50:37 2009 
Running script RunFLOW... 
Completed script RuFLOW... 
Executed (RunFLOW) successfully. 
End Time: Mon Nov 30 16:50:48 2009 (Elapsed Time: 11.00 seconds) 

스크립트는 정보 (날짜, 반복 수 등)의 전체 화면을 출력한다. ArcGIS에서 모델을 실행 한 후 표시되는 창에서이 정보를 모두보고 싶습니다. 현재 인쇄중인 항목과 함께이 정보를 볼 수 있습니다. 인쇄, 통신, 플러시를 시도했지만 할 수 없었습니다. 어떤 제안? 그것은 바로 지금처럼 내가 스크립트를 실행하면

, 그것은 실행 파일을 실행하지만

ERROR 999998: There are no more files. 

감사

내가는 ArcGIS에 대해 아무것도 몰라
+0

1. "이전 질문을 다시 말해 보겠습니다."와 같이 혼동을주지 않는 관련 항목을 생략하십시오. 그런 다음 페이지의 오른쪽에 서식 힌트가 있는지 확인하십시오. –

+0

@Mesut : 귀하의 질문을 재 형식화하십시오 : 코드 블록을 수행하는 방법을 배우려면 편집기 도움말을 참조하십시오 – jkp

+0

서식을 주셔서 감사합니다 ... – Mesut

답변

0

를 다음과 같이 오류를 준다, 그래서에서 촬영 될 수 있습니다 여기에 어둠이 있지만 ... 표준 출력을 원하면 보통 communicate() 방법을 원하지 않습니다. communicate() 방법은 이 과정 상호 작용에 사용되는

p=subprocess.Popen(Flow_bat,shell=True,stdout=subprocess.PIPE) 
stdout_value = p.stdout.read() 

: 당신이 뭔가를 할 수 있습니다. 문서에서 :

Interact with process: Send data to stdin. Read data from stdout 
and stderr, until end-of-file is reached. Wait for process to 
terminate. 

내가 추측하고있어 그는 ArcGIS는 stdin가 연결되지 않았 스크립트를 실행하고 어떤 이유로 종료 스크립트가 발생하는 경우.

+1

정보 주셔서 감사합니다. 나는 아래 스크립트를 추가하려고 시도했다 p = subprocess.Popen (Flow_bat, shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) for line in p.stdout.readlines() : 인쇄 줄 retval = p .wait() 내 프로그램이 실행 (putputs에서 검사 할 수 있음)하지만 여전히 내 유료 진행 창에서 명령 창 정보를 인쇄하지 않습니다. 나는 stdout_value = p.stdout.read()를 시도해 보았지만 인쇄가되지 않았다. 다른 제안 사항이 있으십니까? – Mesut

+0

나는 그 밖의 무엇을 제안해야하는지 잘 모르겠습니다. ArcGIS에 액세스 할 수 없어 필자는 일종의 비행 장애입니다. – larsks

0

난 당신이 여부를 알고 있는지 확실하지 않습니다하지만 난 사용

gp.AddMessage('blah blah') 

얻을 수있는 메시지 창 처리는 ArcGIS에 나타납니다. 파이썬에서 가져 와서 ArcGIS 엔진에 액세스하는 라이브러리 인 지오 프로세서 객체의 메서드입니다. 지오 프로세싱을 수행 중이라면 이미이 라이브러리를 가져 왔을 것입니다.