DOS批处理文件在专有Java应用程序中输入命令并接收反馈?
Posted
技术标签:
【中文标题】DOS批处理文件在专有Java应用程序中输入命令并接收反馈?【英文标题】:DOS batch file to enter commands in proprietary java app and receive feedback? 【发布时间】:2011-02-06 20:15:22 【问题描述】:我正在开展一个项目,我希望能够通过高频啁啾在杜克智能家居中打开和关闭灯。照明系统称为 Clipsal Square-D,而允许用户访问照明控制的程序称为 CGate。我打算在 Matlab 中进行一些信号处理,然后从 Matlab 创建一个批处理文件以与 Cgate 交互。 Cgate 是一个专有的 Java 应用程序,如果从 DOS 命令行运行,它会打开另一个看起来像 DOS 命令提示符的窗口。我有一个批处理文件,可以检查 Cgate 是否正在运行,如果没有,请打开它。
但我不知道该怎么做实际上是从批处理文件中运行 Cgate 程序中的命令,同样地,从 Cgate 获取响应。此类命令的一个示例是“noop”,它应该返回“200 OK”。
任何帮助将不胜感激!提前非常感谢你:)
(顺便说一下,这是我现有的批处理文件)
@ECHO off
goto checkIfOpen
:checkIfOpen
REM pv finds all open processes and puts it in result.txt
%SystemRoot%\pv\pv.exe
%SystemRoot%\pv\pv.exe > result.txt
REM if result has the word notepad in it then notepad is running
REM if not then it opens notepad
FIND "notepad.exe" result.txt
IF ERRORLEVEL 1 START %SystemRoot%\system32\Clipsal\C-Gate2\cgate.exe
goto end
:end
【问题讨论】:
【参考方案1】:我不知道如何在 Windows 上执行此操作,但在 UNIX 上,有一个名为 expect 的程序专为此类任务而设计。如果你安装了Cygwin,你应该可以在Windows上使用expect实用程序了。
【讨论】:
我下载了expect,但我不明白如何将它合并到批处理文件中——您还有什么关于语法之类的提示吗? 我看了更多的东西,发现“cygwin 的 Expect 在 Cygwin 下可以正常工作,只要你期望的是一个 cygwin 应用程序。它不适用于普通/本机 Win32 控制台应用程序。”所以我尝试使用 ActiveState 的版本,但被难住了。【参考方案2】:您正在调用start cgate.exe
,这将导致 cgate.exe 在新窗口中启动。首先,您可能希望在同一窗口中运行 cgate,这意味着您应该删除 start
。
其次,您可以使用 shell 重定向将命令从文本文件传递到 cgate
的 STDIN,如下所示:
cgate.exe < commands.txt
这可能会起作用,但可能不会,这取决于 cgate.exe 实际接收数据的方式。
如果您想进行双向通信,即发送数据、获取响应,然后根据响应的内容发送更多数据,则必须使用批处理文件以外的其他方式。大多数脚本语言(perl、python)都可以用于此目的,或者 C 或其他任何语言。
【讨论】:
以上是关于DOS批处理文件在专有Java应用程序中输入命令并接收反馈?的主要内容,如果未能解决你的问题,请参考以下文章