1
-> version
VxWorks (for Company MMC-C PPC82XX F2000) version 5.5.2.
Kernel: WIND version 2.6.            

Tornado のバージョンは tornado2.2.2_PPC のようです。

VxWorks は私にとってまったく新しいものなので、ご容赦ください。

「ld < mymodule.out」でロードしたモジュールがあり、メソッド「mymodule()」を呼び出して実行します。

問題は、そのモジュールのすべての出力 (タスクを生成し、定期的に printf のステータス情報を生成する) を null または同等のものに送りたいということです。これは顧客のマシンで実行されるものではないため、「1 回限り」のアプローチで十分です。

背景: 私がやろうとしているのは、ボックスへの telnet セッションを自動化し、モジュールをロードして実行し、終了したらログオフすることです。wscript を使用して telnet を自動化し、スクリプトの完了時にログオフしないことを除けば、うまく機能しています。プロセスを起動したときにログオフに失敗する理由については、よくわかりません。その呼び出しを削除すると、telnet セッションが開き、問題なく閉じます。見てみな:

:: :::::::::::::::::::::::::::::::::::::::::::::
:: http://www.antionline.com/showthread.php?264924-Scripting-windows-Telnet
:: temp_SendKeys.VBS will contain the "commands"
ECHO.set handler=WScript.CreateObject("WScript.Shell") >temp_SendKeys.VBS
ECHO.WScript.echo now() >>temp_SendKeys.VBS
ECHO.handler.run("Telnet") >>temp_SendKeys.VBS
ECHO.WScript.sleep 1500 >>temp_SendKeys.VBS

:: :::::::::::::::::::::::::::::::::::::::::::::
:: Open Connection To Telnet Host
ECHO.handler.SendKeys "open %Server% 2002~" >>temp_SendKeys.VBS
ECHO.WScript.sleep 1500 >>temp_SendKeys.VBS

:: :::::::::::::::::::::::::::::::::::::::::::::
:: Send Login Name
ECHO.handler.SendKeys "system~" >>temp_SendKeys.VBS
ECHO.WScript.sleep 1500 >>temp_SendKeys.VBS
:: Send Password
ECHO.handler.SendKeys "default~" >>temp_SendKeys.VBS
ECHO.WScript.sleep 2000 >>temp_SendKeys.VBS

:: :::::::::::::::::::::::::::::::::::::::::::::
:: Send Stuff to be done
ECHO.handler.SendKeys "unld ""MyModule.out""~" >>temp_SendKeys.VBS
ECHO.WScript.sleep 1000 >>temp_SendKeys.VBS
ECHO.handler.SendKeys "ld < MyModule.out~" >>temp_SendKeys.VBS
ECHO.WScript.sleep 1000 >>temp_SendKeys.VBS
ECHO.handler.SendKeys "xdelete ""*data.txt""~" >>temp_SendKeys.VBS
ECHO.WScript.sleep 3000 >>temp_SendKeys.VBS

ECHO.handler.SendKeys "myModule()~" >>temp_SendKeys.VBS
ECHO.WScript.echo "sleeping 1080000ms (18min)" >>temp_SendKeys.VBS
ECHO.WScript.sleep 1080000 >>temp_SendKeys.VBS

:: :::::::::::::::::::::::::::::::::::::::::::::
:: Logout
ECHO.handler.SendKeys "~~exit~" >>temp_SendKeys.VBS
ECHO.WScript.sleep 1000 >>temp_SendKeys.VBS
ECHO.handler.SendKeys "quit~" >>temp_SendKeys.VBS
ECHO.WScript.sleep 1000 >>temp_SendKeys.VBS
ECHO.WScript.echo now() >>temp_SendKeys.VBS

:: Run the script
cscript//nologo temp_SendKeys.VBS
pause

「Send Stuff to be done」セクションの最後の 3 行をコメント アウトすると、スクリプトは正常に動作します。これらの行を配置すると、 exit および quit コマンドが実行されないように見えます。テキストが telnet ウィンドウにエコーされたことさえわかりません。理由についてはいくつかのクレイジーな理論がありますが、モジュールの出力を非表示にすることから始めて、それが修正されるかどうかを確認したいと思います。

もちろん、私は常に新しいアイデアに対してオープンです。

更新

モジュールにオプションを追加して、単にステータス メッセージを出力しないようにしました。そのため、パラメータとして 0 または 1 を指定してメソッドを呼び出すことで切り替えることができます。 この記事は、印刷用のマクロを作成するのに役立ちました (ただし、コンパイル時に設定する必要がある別のマクロではなく、メソッドの入力変数によって実行時に設定される static int を使用しました)。

しかし、それは役に立ちませんでした。

さらにテストを重ねた結果、wscript がスリープ状態になり、目的のアプリにキーストロークを送信できる最大時間は約 5 分であることがわかりました。私が行ったグーグル検索で何らかの制限が明らかになったわけではないので、理由はわかりませんが、そうです。

私が学んだことは、モジュールを起動した後に単に終了し、呼び出し元のバッチ ファイルで待機できるということです。したがって、待機して待機し、さらに待機します(遅延は純粋に任意であり、過去の実行の観察に基づいて選択されます-悪いことは知っていますが、これは開発スクリプトであり、年に約2回実行されます。これで十分です。一体、それはすでに現在のプロセスを大幅に改善)、次のタスクに進みます。トリックを行うようです!

それでも困惑していますが、約 5 分後に wscript が機能しないのはなぜですか。

4

0 に答える 0