さまざまなBashシェルスクリプトを使用するPythonプログラムがあります。ただし、それらのいくつかは(y / n)入力を必要とします。質問番号に基づいて必要な入力を知っているので、それを自動的に提供できるかどうかの問題です。
Pythonでそれを行う方法はありますか?
最後の手段として、窓などに信号を送ることはできますが、そうはしません。
さまざまなBashシェルスクリプトを使用するPythonプログラムがあります。ただし、それらのいくつかは(y / n)入力を必要とします。質問番号に基づいて必要な入力を知っているので、それを自動的に提供できるかどうかの問題です。
Pythonでそれを行う方法はありますか?
最後の手段として、窓などに信号を送ることはできますが、そうはしません。
を使用しsubprocess.Popen
ます。
from subprocess import Popen, PIPE
popen = Popen(command, stdin=PIPE)
popen.communicate('y')
おそらく最も簡単な方法は、pexpectを使用することです。例(wikiの概要から):
import pexpect
child = pexpect.spawn('ftp ftp.openbsd.org')
child.expect('Name .*: ')
child.sendline('anonymous')
child.expect('Password:')
child.sendline('noah@example.com')
child.expect('ftp> ')
child.sendline('cd pub')
child.expect('ftp> ')
child.sendline('get ls-lR.gz')
child.expect('ftp> ')
child.sendline('bye')
余分なモジュールを使用したくない場合は、使用するsubprocess.Popen
のが方法ですが、より複雑です。まず、プロセスを作成します。
import subprocess
script = subprocess.Popen(['script.sh'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, shell=True)
ここで使用するかshell=True
、コマンド引数の前にシェルの名前を追加することができます。前者の方が簡単です。
script.stdout
次に、質問番号が見つかるまで読む必要があります。次に、への答えを書きますscript.stdin
。