2017-11-03 3 views
0

Subprocess 객체를 만들었습니다. 하위 프로세스가 셸을 호출하면 아래에 제공된 셸 명령을 보내야합니다. 내가 시도한 코드 :작성한 Subprocess Python에 통신으로 입력 (명령) 보내기

from subprocess import Popen, PIPE 

p = Popen(["code.exe","25"],stdin=PIPE,stdout=PIPE,stderr=PIPE) 
print p.communicate(input='ping 8.8.8.8') 

이 명령은 실행되지 않고 아무것도 입력되지 않고 있습니다. 미리 감사드립니다.

+0

프로세스의 표준 오류를 확인 했습니까? – Vinny

+0

예, 전혀 비어 있습니다. 내 생각에 –

+0

code.exe에서 셸을 생성합니까? –

답변

0

나는 인수 한 후 프로세스 표준 입력 읽기 code.exe을 시뮬레이션 할 경우 다음

import os 
from subprocess import Popen, PIPE 

cwd = os.getcwd() 
exe = os.path.join(cwd, 'foo.sh') 
p = Popen([exe, '25'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
out, err = p.communicate(input='aaa\nbbb\n') 
for line in out.split('\n'): 
    print(line) 

스폰 프로세스 출력 :

arg: 25 
stdin: 
aaa 
bbb 
코드를 업데이트

#!/usr/bin/env bash 
echo "arg: $1" 
echo "stdin:" 
while read LINE 
do 
    echo "$LINE" 
done < /dev/stdin 

약간을

\n없이 입력이 변경되는 경우 :

out, err = p.communicate(input='aaa') 

는 그 다음이 표시되지 않습니다

arg: 25 
stdin: 

Process finished with exit code 0 

그래서 당신은 파이프의 양쪽 끝 사이의 프로토콜을 자세히 볼 수도 있습니다. 예를 들어 충분할 수도 있습니다.

input='ping 8.8.8.8\n' 

희망이 있습니다.

관련 문제