2016-06-29 14 views
0

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:追加情報

+0

コマンドラインからこれらのオプションを受け入れるようにリモートプログラムを変更するだけで、あなたのタスクはもっと簡単になります! – salva

+0

リモートプログラムは変更することができません。別の部門からのものであり、変更すべきではありません。いずれにせよ、問題はトークンが送られた、私の答えを見ることができます。おかげで:) –

答えて

1

、問題は、child.sendline('\n')たプログラムは期待してキーを押すと入力しますが、ログを通過すると、密接に私は、通常の出力にしながら、自動化ログに、私は、2つの改行を得たことを見ました私は改行が1つあった。

それはその後の流れの残りの部分でそれとそれは私が奇妙なnothingsと改行を得た理由です。

child.sendline('')に変更しました。

ありがとうございました。

関連する問題