2017-05-04 1 views
0

나는 커스텀 입력 방식을 가지고 있으며, 파이썬 모듈과 통신 할 수있다. 로컬 stdout의 모든 내용이 원격 장치에 인쇄되고 원격 장치에서 보낸 모든 내용이 로컬 stdin으로 이동하므로 원격 장치가 프로그램에 지정된 입력을 제어 할 수 있도록 쉘을 제어하려고합니다. 원격 장치가 프로그램에 응답 할 수있는 기능 (예 : ssh)이 input입니다. 내가 어떻게해야셸 stdin을 파이썬에서 제어하기

#! /usr/bin/python 
from subprocess import Popen, PIPE 
import thread 
from mymodule import remote_read, remote_write 
def talk2proc(dap): 
    while True: 
     try: 
      remote_write(dap.stdout.read()) 
      incmd = remote_read() 
      dap.stdin.write(incmd) 
     except Exception as e: 
      print (e) 
      break 
while True: 
    cmd = remote_read() 
    if cmd != 'quit': 
     p = Popen(['bash', '-c', '"%s"'%cmd], stdout=PIPE, stdin=PIPE, stderr=PIPE) 
     thread.start_new_thread(talk2proc, (p,)) 
     p.wait() 
    else: 
     break 

그러나이 작동하지 않습니다 나는 표준 입력과 표준 출력을 제어하는 ​​파이썬 하위 프로세스를 사용?

p.s. 윈도우에 차이점이 있습니까?

답변

0

내가, 내가

:q 

내가 자식 래퍼 사용이를 a.txt이 STDIN

from subprocess import call 
call(['some_app', 'param'], STDIN=open("a.txt", "rb")) 

이이 문제 사용했다, 이것은 현명한 데이터 행을 입력합니다 some_app에 예상하고 사용자 입력이있는 인터럽트가있을 때마다

0

Windows에는 차이가 있습니다. 이 줄은 Windows에서 작동하지 않습니다 'bash'의 상응 'cmd.exe'입니다

p = Popen(['bash', '-c', '"%s"'%cmd], stdout=PIPE, stdin=PIPE, stderr=PIPE) 

때문이다.

관련 문제