これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドautoexpectです。
プログラム:
NAME
autoexpect-セッションの監視からExpectスクリプトを生成します
SYNOPSIS
自動期待 [ 引数 ] [ プログラム 引数..。 ]
はじめに
autoexpectは、別のプログラムとの対話を監視し、次のようなExpectスクリプトを作成します。
あなたの相互作用を再現します。 直線スクリプトの場合、autoexpectはかなりの時間を節約します
手でスクリプトを書くこと。 あなたがExpectの専門家であるとしても、あなたはそれを見つけるでしょう
autoexpectを使用して、相互作用のより無意味な部分を自動化するのに便利です。 です
autoexpectスクリプトのハンクを一緒にカットアンドペーストする方が、からスクリプトを作成するよりもはるかに簡単です。
スクラッチ。 そして、あなたが初心者であれば、何も学ばなくても逃げることができるかもしれません
autoexpectを呼び出す方法よりもExpectについての詳細。
autoexpectを使用する最も簡単な方法は、引数なしでコマンドラインから呼び出すことです。
例:
%autoexpect
デフォルトでは、autoexpectはシェルを生成します。 プログラム名と引数を指定すると、
autoexpectはそのプログラムを生成します。 例えば:
%autoexpect ftp ftp.cme.nist.gov
生成されたプログラムが実行されたら、通常どおりに対話します。 シェルを終了したとき
(または指定したプログラム)、autoexpectは新しいスクリプトを作成します。 デフォルトでは、
autoexpectは、新しいスクリプトを「script.exp」に書き込みます。 これは-fフラグでオーバーライドできます
その後に新しいスクリプト名が続きます。
次の例では、「ftp ftp.cme.nist.gov」を実行し、結果のExpectスクリプトを保存します。
ファイル「nist」内。
%autoexpect -f nist ftp ftp.cme.nist.gov
autoexpectはスクリプトの動作を保証しないことを理解することが重要です。
それは必然的に特定のことについて推測する必要があります-そして時々それは間違って推測します。
ただし、通常、これらの問題を特定して修正するのは非常に簡単です。 典型的な問題
には次の値があります:
・タイミング。 驚くほど多数のプログラム(rn、ksh、zsh、telnetなど)
およびデバイス(モデムなど)は、「速すぎる」後に到着するキーストロークを無視します
プロンプト。 新しいスクリプトがXNUMXつの場所でハングアップしていることに気付いた場合は、
前の送信の直前に短いスリープ。
変数をオーバーライドすることで、この動作を強制できます
生成されたスクリプトの先頭近くにある「force_conservative」。 この
「保守的」モードでは、autoexpectが自動的に一時停止します(XNUMX分のXNUMX
秒)各文字を送信する前に。 これは私が知っているすべてのプログラムを和らげます
の。
この保守的なモードは、すぐに安心したい場合に便利です。
問題はタイミングの問題です(または、本当にどれだけ速いか気にしない場合
スクリプトが実行されます)。 この同じモードは、スクリプト生成の前に強制することができます。
-cフラグを使用します。
幸い、これらのタイミングスポットはまれです。 たとえば、telnetは無視します
エスケープシーケンスを入力した後にのみ文字。 モデムは無視するだけです
初めて接続した直後のキャラクター。 いくつか
プログラムは常にこの動作を示しますが、通常は
無効にします。 たとえば、rnの-Tフラグはこの動作を無効にします。
次の例では、保守モードでautoexpectを開始します。
autoexpect -c
-Cフラグは、保守モードを切り替えるためのキーを定義します。 次の例
^ Lをトグルとして(非保守モードで)autoexpectを開始します。 (ご了承ください
^ Lは文字通り入力されます-つまり、実際のコントロールを入力します-L)。
autoexpect -C ^ L
次の例では、^ Lを使用して保守モードでautoexpectを開始します。
トグル。
autoexpect -c -C ^ L
・エコー。 多くのプログラムは文字をエコーします。 たとえば、「more」と入力すると、
シェル、autoexpectが実際に見るものは次のとおりです。
'm'と入力しました。
「m」と入力されたコンピューター、
'o'と入力しました。
「o」と入力されたコンピューター、
'r'と入力しました。
「r」と入力されたコンピューター、
...
プログラムの特定の知識がなければ、あなたがそうであるかどうかを知ることは不可能です
次の文字を入力する前に、各文字がエコーされるのを待っています。 自動期待する場合
文字がエコーされているのを見て、それらすべてをグループとして送信できると想定します
それらを元のようにインターリーブするのではなく。 これにより、
読みやすいスクリプト。 ただし、次の場合は正しくない可能性があります
あなたは本当に各キャラクターがエコーするのを見るのを待たなければなりませんでした。
・ 変化する。 Autoexpectは、スクリプト内のインタラクションからのすべての文字を記録します。
これは、あなたに判断を下す能力を与えるので望ましいです
重要なことと、パターンマッチで置き換えることができるもの。
一方、実行ごとに出力が異なるコマンドを使用する場合は、
生成されたスクリプトは正しくありません。 たとえば、「日付」
コマンドは常に異なる出力を生成します。 したがって、dateコマンドを使用して
autoexpectを実行することは、編集が必要なスクリプトを作成する確実な方法です。
それが機能するために。
-pフラグは、autoexpectを「プロンプトモード」にします。 このモードでは、autoexpectは
プログラム出力の最後の行のみを探します-これは通常、
促す。 これは、日付の問題(上記を参照)およびその他のほとんどを処理します。
次の例では、プロンプトモードでautoexpectを開始します。
autoexpect -p
-Pフラグは、プロンプトモードを切り替えるためのキーを定義します。 次の例が始まります
トグルとして^ Pを使用したautoexpect(非プロンプトモード)。 ^ Pは
文字通り入力-つまり、実際のコントロール-Pを入力します。
autoexpect -P ^ P
次の例では、^ Pをトグルとしてプロンプトモードでautoexpectを開始します。
autoexpect -p -P ^ P
その他 FLAGS
-静かな フラグは、autoexpectによって生成される情報メッセージを無効にします。
-Q フラグは、自動期待する文字を入力するために使用できる引用文字に名前を付けます
トグルとして使用されるため、それ以外の場合は消費します。
次の例は、入力方法を提供するために使用される引用符付きのいくつかのフラグを示しています
文字通りトグルします。
autoexpect -P ^ P -C ^ L -Q ^ Q
スタイル
Expectプログラムに「スタイル」があるかどうかはわかりませんが、autoexpectは間違いなく必要です
どんなスタイルのモデルとしても持ちこたえられません。 たとえば、autoexpectはExpectの機能を使用します
これは、特にコンピューターで生成されたスクリプトを対象としています。 だからしようとしないでください
autoexpectによって生成されたかのように見えるスクリプトを忠実に記述します。 これではありません
有用。
一方、autoexpectスクリプトは、いくつかの価値のあることを示しています。 たとえば、あなたは
を実行するだけで、Tclスクリプトで文字列を使用するために文字列を引用する方法を確認できます。
autoexpectを介して文字列。
onworks.netサービスを使用してオンラインでautoexpectを使用する