在Java中,将命令发送到另一个命令行程序
我在Windows
XP上使用Java,并且希望能够将命令发送到另一个程序,例如telnet。我不想简单地执行另一个程序。我要执行它,然后在它运行后向它发送一系列命令。这是我要执行的操作的代码,但是无效:(如果取消注释,并将命令更改为“
cmd”,它将按预期工作。请帮助。)这是一个简化的示例。在生产中,将发送更多命令,因此 请不要建议调用“ telnet localhost”。
try
{
Runtime rt = Runtime.getRuntime();
String command = "telnet";
//command = "cmd";
Process pr = rt.exec(command);
BufferedReader processOutput = new BufferedReader(new InputStreamReader(pr.getInputStream()));
BufferedWriter processInput = new BufferedWriter(new OutputStreamWriter(pr.getOutputStream()));
String commandToSend = "open localhost\n";
//commandToSend = "dir\n" + "exit\n";
processInput.write(commandToSend);
processInput.flush();
int lineCounter = 0;
while(true)
{
String line = processOutput.readLine();
if(line == null) break;
System.out.println(++lineCounter + ": " + line);
}
processInput.close();
processOutput.close();
pr.waitFor();
}
catch(Exception x)
{
x.printStackTrace();
}
-
这看起来还可以,因为它不会产生那么多的输出,但是您应该真正在单独的线程中进行读取和写入,这样它才不会填满缓冲区并阻止在等待下一步之前等待您读取。
因此,如果到达刷新发送给它的命令的地步,请通过将要发送的文本传递给命令中的标准输入,来找出Windows
telnet客户端是否支持从标准输入而不是从控制台接收命令提示。例如,
echo dir c:\ | cmd
导致cmd运行,列出c:驱动器内容并退出,其行为与您dir c:\
在控制台中键入的行为大致相同。但是echo open localhost | telnet
会导致telnet清除屏幕然后退出,而不是像在控制台中键入一样进行操作。由于telnet需要掩盖用户输入的密码,因此很可能是使用控制台API而不是从标准输入中读取。它的帮助不会列出任何命令参数来告诉它从标准输入中读取内容,因此也许您需要使用更适合脚本编写的telnet实现。
-
将命令行参数发送到npm脚本
2021-02-02 关注 0 浏览68 1答案
-
如何使用Java从另一个类获取命令行参数
2021-01-30 关注 0 浏览67 1答案
-
将变量从一个jsp发送到另一个jsp
2021-01-31 关注 0 浏览137 1答案
-
C#使用Sendkey函数将密钥发送到另一个应用程序
2021-02-02 关注 0 浏览127 1答案
-
将值从1个jsp发送到另一个jsp
2021-02-01 关注 0 浏览98 1答案
-
将数据从一个协议发送到另一个协议中?
2021-01-29 关注 0 浏览80 1答案
-
如何在C#中读取另一个进程的命令行参数?
2021-02-02 关注 0 浏览106 1答案
-
将多个意图从一个活动发送到另一个活动
2021-01-30 关注 0 浏览84 1答案
-
解析Java命令行程序的参数
2021-01-30 关注 0 浏览90 1答案
-
在命令行中制作一个Java包
2021-01-30 关注 0 浏览93 1答案