私は1つのshファイルを持っています。ターゲットLinuxボックスにインストールする必要があります。だから私は、ユーザからの多くの入力を必要とするshファイルのための自動インストールを書く過程にある。例、私が最初に作ったのは./file.sh
で、それは大きいパラガラフを表示し、ユーザにEnter
を押してもらいます。私はこの場所にこだわっている。サブプロセスにキーデータを送信する方法。ここで私が試したことがあります。サブプロセスlinuxのプロセス送信キーとの通信
import subprocess
def runProcess(exe):
global p
p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while(True):
retcode = p.poll() #returns None while subprocess is running
line = p.stdout.readline()
yield line
if(retcode is not None):
break
for line in runProcess('./file.sh'.split()):
if '[Enter]' in line:
print line + 'got it'
p.communicate('\r')
私の理解が間違っている場合は、訂正してください。重複している場合はご容赦ください。あなたは改行と他には何の束を送信する必要がある場合
出力から[Enter]を見ると、私はフィードラインと呼ばれていました。しかし、まだそれは動作していません。それはプロセスにEnterを与えていません。私が入力を与えると、次の一連の質問がユーザーの入力に対して表示されます。間違いはどこにあるの? –
@Pasupathi: '[Enter]'が表示されているときに 'feednewlines'を呼び出さないで、積極的にフィードするスレッドを起動します。 'runProcess'の外側からもう一度呼び出さないでください。そうしないと、2つのスレッドがサブプロセスの出力を消費するスレッドがなくても、より多くの改行を供給しようとするとデッドロックになります。投稿したコードを実行した場合、スレッドは単独で起動して作業を行います。あなたが望むように動作しない場合は、使用しているプログラムが、キーの押下をキャプチャするために非'stdin'メソッドを使用している可能性があります。 'stdin'を与えることはできません。 – ShadowRanger
それは働いた!私はそれを呼ぶべきではありません。今度は次の質問と回答のためにそれを拡張します –