2017-11-03 16 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

私は、Arg、その後のプロセスの標準入力読み取りに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' 

希望することができます。

関連する問題