-> 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 或等效项。这不是要在客户机器上运行的东西,所以“一次性”方法就可以了。
背景:我正在尝试做的是自动化到盒子的 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
如果我注释掉“发送待完成的内容”部分中的最后三行,则脚本可以正常工作。有了这些行,exit 和 quit 命令似乎不会被执行。我什至没有看到文本回显到 telnet 窗口中。关于原因,我有一些疯狂的理论,但我想从隐藏模块的输出开始,看看是否能解决它。
当然,我总是对新想法持开放态度。
更新:
我在我的模块中添加了一个选项来简单地不打印状态消息..所以我可以通过使用 0 或 1 作为参数调用我的方法来切换它。 这篇文章帮助我创建了一个用于打印的宏(尽管我使用了一个在运行时由方法的输入 var 设置的静态 int,而不是另一个必须在编译时设置的宏),所以它非常漂亮。
但是,它没有帮助。
好的,所以更多的测试表明,大约 5 分钟似乎是 wscript 将休眠并且仍然能够将击键发送到预期应用程序的最大值。不知道为什么我没有通过谷歌搜索发现任何限制,但是,你去吧。
不过,我确实学到的是,我可以在启动模块后简单地退出并在调用批处理文件中等待。所以它等待,等待,再等待更多(延迟纯粹是任意的,是根据对过去运行的观察选择的 - 很糟糕,我知道,但它是一个开发脚本,每年运行大约 2 次,这已经足够好了,哎呀,它已经是对当前流程的巨大改进),然后继续下一个任务。似乎可以解决问题!
尽管如此,仍然感到困惑,为什么 wscript 在大约 5 分钟后无法正常工作。