2014-09-12 5 views
0

작은 스크립트 작업 중입니다. 스크립트는 3 개의 터미널을 열고이 터미널과 독립적으로 상호 작용해야합니다.Python에서 터미널과 상호 작용하는 방법

저는 서브 프로세스가이를 수행하는 가장 좋은 방법이라는 것을 잘 알고 있습니다. 지금까지 해본 내용 :

# /usr/bin/env python 
import subprocess 

term1 = subprocess.Popen(["open", "-a", "Terminal"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
term1.communicate(input="pwd") 

내 문제는 새로운 터미널과 상호 작용할 수 없다는 것입니다. 이 부분 term1.communicate(input="pwd")이 작동하지 않습니다. 새 터미널에 명령을 보낼 수 없습니다. 나는 또한 term1.communicate(input="pwd\n")을 시도했지만 아무 일도 일어나지 않습니다.

어떻게 할 수 있습니까?

P. Mac OS를 사용하고 있습니다.

+1

달성하려는 작업에 대해 새 터미널을 열어야합니까, 아니면 'pwd'를 실행하고 출력을 캡처해야합니까? – user2085282

+1

또한,'communicate'는 프로세스가 완료 될 때까지 기다립니다. 터미널은 일반적으로 닫힐 때까지 종료되지 않으므로 아무 것도하지 않습니다. – user2085282

+0

@ user2085282 제 경우에 2 개의 명령을 실행해야합니다 : "sudo tcprelay telnet"및 "tcprelay --portoffset [arg1] [arg2]"그러나 새로운 터미널을 열지 않고 명령을 실행하면 문제가 발생합니다. 첫 번째 작업이 완료되거나 종료 될 때까지 두 번째 작업을 수행 할 수 있습니다. 그게 내가이 솔루션을 사용하는 이유입니다. –

답변

2

터미널을 열지 않고 두 명령을 동시에 실행할 수 있습니다.

import subprocess 
process1 = subprocess.Popen(["ls", "-l"]) 
process2 = subprocess.Popen(["ls", "-l"]) 

해당 코드를 실행하면 디렉터리가 두 번 나열되어 함께 표시됩니다. 특정 요구에 맞게이를 확장 할 수 있습니다.

tcprelay1 = subprocess.Popen(["tcprelay", "telnet"]) 
tcprelay2 = subprocess.Popen(["tcprelay", "--portoffset [arg1] [arg2]") 
+0

문제는 tcprealy1에서 "sudo"commannd를 사용해야하고 통신해야합니다. –

+0

그러면 sudo를 사용하여 파이썬 스크립트를 실행해야하고 조심해야합니다. 프로세스와 통신 할 수는 있지만, 방금 그 부분을 남겼습니다. – anderspitman

관련 문제