2012-04-19 4 views
2

내가 subprocess.call를 사용하여 파이썬에서 프로세스를 호출하기 위해 노력하고있어 대를 PyDev 콘솔은 다음과 같이 :서브 프로세스 : cmd.exe를

from subprocess import call 

exePath = 'C:\\Test\\EXE.exe' 
inPath = 'C:\\Test\\IN.in' 
outPath = 'C:\\Test\\OUT.out' 
call([exePath, inPath, outPath]) 

이 "이 다음에 EXE.exe에서 몇 줄을 인쇄 핸들 '이 (가) 잘못되었습니다 -하지만 문자열로, 아니 나를는 EXE.exe의 메시지 수 있습니다 생각하게 오류, 같은 : 그러나

Unzipping Solution... 
0.0%      The handle is invalid. 

난에 cmd.exe를 열고 붙여 넣을 때 :

C:\Test\EXE.exe C:\Test\IN.in C:\Test\OUT.out 

잘 작동합니다.

누군가 나를 올바른 방향으로 안내 할 수 있습니까?

감사합니다.

내가 Windows에서 64 비트 파이썬 2.7을 실행하는거야 7.

편집 :

그것은 콘솔이 라인을 덮어 쓰기하는 과정에서 표준 출력을 처리 할 수 ​​PyDev의 문제처럼 지금 보이는 . 코드는 IDLE에서 잘 실행됩니다. PyDev에 대한 수정을 찾고 있는데 ...

+0

가 도움이됩니까 ... 내가 Aptana에 스튜디오는 실제 단말기 교체를 가지고 있다고 생각하지만, 거기에 일을 시작 할 PyDev의 통합은 없다 상관없이 :)

를 호출 누가의 작동 \\ 파일 경로의 모든 곳의 단일 /''? – alan

+0

아니요, a /는 동일한 결과를 제공합니다. –

+0

'shell = True'를'call()'에 추가 할 수 있습니까 –

답변

3

PyDev가 실제 터미널이 아니기 때문에 (Python에서 PyDev에서 실행될 때 os.isatty()가 False를 반환 함)이 문제가 발생했다고 생각합니다.

창에서 :

exe를 정말 단자가에 의존하는 경우

는 현재 당신은 파이썬에서 전화를 걸 수 있습니다, 지금은

...를 PyDev가 할 수있는 정도가 아니다

리눅스에서
popen = subprocess.Popen(['myexe', 'params'], creationflags=subprocess.CREATE_NEW_CONSOLE) 
popen.wait() 

합니다 (CREATE_NEW_CONSOLE 사용할 수 없습니다로) :

args = ['xterm', '-e'] + ['myexe', 'params'] 
popen = subprocess.Popen(args) 
popen.wait() 

그래서 당신이 배를 변경하는 경우

+0

이것은 작동하지 않습니다. 아직 PyDev의 콘솔에서 실행하려고합니다. –

+0

답이 수정되었습니다. –

+0

아름다운. 감사! –