2013-01-19 2 views
0
import os, subprocess 
p = subprocess.Popen("cmd.exe", stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) 
print>>p.stdin, "echo hi" 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 
print>>p.stdin, "python" 
p.stdout.readline() 

이제 p.stdout.readline()을 수행하면 왜 파이썬 셸이 표시되지 않습니까?다른 대화 형 쉘을 생성하는 파이썬 하위 프로세스 ("cmd")

반면에 python 대신 서브 프로세스에서 다른 cmd을 시작한 경우 새로운 cmd 셸 스폰을 볼 수 있습니다.

import os, subprocess 
p = subprocess.Popen("cmd.exe", stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) 
print>>p.stdin, "echo hi" 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 
print>>p.stdin, "cmd" 
p.stdout.readline() 
p.stdout.readline() 
p.stdout.readline() 

무엇이 다른가요?

답변

0

표준 출력이 터미널 장치가 아닌 경우 Python은 다르게 동작합니다. 프롬프트가 없거나 배너가 없으면 전체 스크립트를 읽고 실행합니다.

정확히 어떻게 Windows에 이식되었는지는 모르겠지만 "콘솔 핸들"은 "터미널 장치"에 대한 결론입니다.

+0

나를 돕지 않습니다. 첫 번째 경우에 두 번째 행동을 원합니다. – prongs

+0

'python -i'를 사용하면 도움이됩니다 –

+0

아니요. 'python -i'를 사용한 후에도 여전히 똑같은 동작이 – prongs