sshをリモートサーバーに接続し、PERLスクリプトをアクティブにしてスクリプトと対話する(ユーザーが選択できるメニューを生成する)小さなオートメーションプログラムを作成しています。 私はユーザーに事前定義された回答リストを持っています.PERLスクリプトを使い、メニュープロンプトを書き留めて "pexpect"で使用しました。 は今、私が持っている:だからpexpectが時々ヒットし、時には失敗してタイムアウト時に終了する
global MYTIMEOUT
print "starting building"
child.sendline('/root/myscripts/perl/_build_.pl')
child.expect('username',timeout=MYTIMEOUT)
child.sendline(value_dict['myname'])
child.expect('reason',timeout=MYTIMEOUT)
child.sendline(value_dict['myreason'])
child.expect(value_dict["branch"],timeout=MYTIMEOUT)
child.sendline(branch_number)
child.expect('enter revision',timeout=MYTIMEOUT)
child.sendline('\n')
child.expect('choose customers',timeout=MYTIMEOUT)
child.sendline(value_dict['customers'])
child.expect('choose number',timeout=MYTIMEOUT)
child.sendline(value_dict['component_list'])
username,reason,branch and revision
すべてで期待が正常に動作し、私は子供のログファイルを開くとき、私は、彼らが正しいラインに対応することを明確にそれを見ることができます。 これに続いてPERLスクリプトによって実行されるいくつかのコードが5〜6秒間実行されます。そこでは実行している人のシェル情報に出力されます。その後'choose customers' and 'choose number'
に送られます。 [戻り値]を送信し、数字を選択すると予想されるときは何も送信せず、最終的にタイムアウトします。
センドラインを強制的に強制する方法はありますか?またはパターンがキャッチする必要があるかどうかを確認してください。
EDIT:追加情報
コマンドラインからこれらのオプションを受け入れるようにリモートプログラムを変更するだけで、あなたのタスクはもっと簡単になります! – salva
リモートプログラムは変更することができません。別の部門からのものであり、変更すべきではありません。いずれにせよ、問題はトークンが送られた、私の答えを見ることができます。おかげで:) –