2012-10-02 3 views
1

저는 명령 행 (예 : python 자체)을 호출하는 Python 코드를 작성하고 있으며 명령은 자체 쉘을 열 것입니다. 어떻게 파이썬이이 셸을 제어 할 수 있습니까?Python - 다른 쉘을 여는 명령을 엽니 다.

import subprocess 
subprocess.call(['./testprg']) 

# testprg will open its own shell 
# so the code below will not work 
subprocess.call(['i 2']) 

testprg는 쉘 프롬프트를 여는 또 다른 프로그램입니다. "i 2"를 입력하면 값 2 인 "삽입"명령이 트리거됩니다.

답변

2

수 없습니다. subprocess은 대화 형 셸과 상호 작용하지 않습니다.

첫 번째 하위 프로세스에서 stdin=PIPE을 사용해야하고 해당 파이프에 'i 2\n'을 작성해야합니다.

대화 형 프로그램과 상호 작용하려는 경우 pexpect을 사용해보십시오. 그것은 당신의 삶을 훨씬 쉽게 만들 것입니다.

+1

또는 ['winpexpect'] (https://bitbucket.org/geertj/winpexpect/wiki/Home)는 윈도우 – jfs

0

subprocess.Popen.communicate()을 살펴보십시오. 일부 라인을 수신하고 다른 프로세스에 명령을 보내는 것이면, 그것은 당신이 찾고있는 것이어야합니다.

일부 예 :

pout, perr = Popen([tools['PASSWD'], username], stdin=PIPE, stdout=PIPE, 
     stderr=PIPE).communicate("%s\n%s\n" % (password, password)) 
+0

에 내 코드를 수정하고 오류가 있습니다. % 1은 (는) 유효한 win32 응용 프로그램이 아닙니다. 대신 Linux 명령을 실행하고 있습니다. – Ashton

+0

수수께끼로 말하지 마십시오. 정확한 명령을 사용했는지, 사용했는지, 오류를 그대로 복사하십시오. 나의 예는 또한 리눅스에서 나온 것이다. – Michael

+0

Pout, perr = Popen ([ './ cmdl'], stdin = PIPE, stdout = PIPE, stderr = PIPE) .communicate ('i 2 \ n') 맞습니까? 죄송합니다, 저는 Python으로 아주 새롭습니다. – Ashton

관련 문제