在Java中,将命令发送到另一个命令行程序

发布于 2021-01-30 16:56:35

我在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();
    }
关注者
0
被浏览
107
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    这看起来还可以,因为它不会产生那么多的输出,但是您应该真正在单独的线程中进行读取和写入,这样它才不会填满缓冲区并阻止在等待下一步之前等待您读取。

    因此,如果到达刷新发送给它的命令的地步,请通过将要发送的文本传递给命令中的标准输入,来找出Windows
    telnet客户端是否支持从标准输入而不是从控制台接收命令提示。

    例如,echo dir c:\ | cmd导致cmd运行,列出c:驱动器内容并退出,其行为与您dir c:\在控制台中键入的行为大致相同。但是echo open localhost | telnet会导致telnet清除屏幕然后退出,而不是像在控制台中键入一样进行操作。由于telnet需要掩盖用户输入的密码,因此很可能是使用控制台API而不是从标准输入中读取。它的帮助不会列出任何命令参数来告诉它从标准输入中读取内容,因此也许您需要使用更适合脚本编写的telnet实现。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看