コマンドラインから実行する小さなtest.shスクリプトがあり./test.sh
、入力した2つの質問への入力を求められます。その後、スクリプトが終了するまでループしますctrl-c
。
を実行できる小さなPythonスクリプトを作成しtest.sh
、Pythonで設定した変数var1とvar2からスクリプトの質問への入力を入力したいと思います。
また、xを長くループしてtest.shを実行し、それを終了して、var3の値に基づいてx分ごとに再起動する別の変数var3が必要です。
test.sh
私はこのコードを書きましたが、起動後にコマンドが渡されないようです。
import os
os.system('./test.sh arg1')
time.sleep(10)
sh('input answer 1')
time.sleep(5)
sh('input answer 2')
現在、私のコードはこのスレッドに基づいて次のように更新されています。
#!/usr/bin/env python
import pexpect
import sys
import os
child = pexpect.spawn ('./test.sh -arg1')
child.expect ('some expected output from the .sh file')
child.expect ('more expected output from the .sh file')
child.expect ('(?i)Enter Username:')
child.sendline ('myusername')
child.expect ('(?i)Enter Password:')
child.sendline ('mypassword')
# sys.stdout.write (child.after)
# sys.stdout.flush()
time.sleep(30)
child.sendcontrol('c')
child.close()
print 'Goodbye'
--修正済み--問題は、タイムアウトまたはスリープが中断されていることです。おそらく、.shスクリプトの出力が原因です。このスクリプトをtimeoutまたはtime.sleepのコメントなしで実行すると、影響がなく、child.close()に直接到達してプログラムが終了するか、child.sendline('mypassword')がハングアップします。なんらかの理由で、.shスクリプトのパスワードプロンプトでスタックします...おそらく、対話できないため、実際にはスタックしていません。 - 修繕 -
スクリプトを30秒(またはx)一時停止すると、あとはすべてをx回ループさせるだけです。最後に、エラーチェックを追加する必要があります。これは、.SHがさまざまなテキスト文字列で応答するため、スクリプトをすぐに再実行する必要があることを示している可能性があります。
みんなの助けてくれてありがとう!