【问题标题】:Sending cmd and receiving output using java使用java发送cmd和接收输出
【发布时间】:2013-11-12 06:42:25
【问题描述】:

我基本上是在制作一个 shell 来玩玩向命令提示符发送和接收东西。不过,我遇到了一些问题。这是我的命令行代码:

public class CommandLine {
    private Process cmdProcess;
    private BufferedReader reader;
    private BufferedWriter writer;
    private StringBuffer bf;
    private String ls = System.getProperty("line.separator");

public CommandLine() {
}

public void connect(){
    try{
        cmdProcess = Runtime.getRuntime().exec("cmd /b start");
        reader = new BufferedReader(new InputStreamReader(cmdProcess.getInputStream()));
        writer = new BufferedWriter(new OutputStreamWriter(cmdProcess.getOutputStream()));
        bf = new StringBuffer();
    } catch(Exception e){ }
}

public void sendCommand(String command){
    try {
        writer.write(command + ls);
        writer.flush();
    } catch(Exception e){
        e.printStackTrace();
    }
}

public void getContent(){
    String s;
    while((s = readResponse()) != null){
        System.out.println(s);
    }
}

public String readResponse(){
    try{
        return reader.readLine();
    } catch(Exception e){
        return null;
    }
}

public void disconnect(){
    try{
        sendCommand("quit");
        reader.close();
        writer.close();
    } catch(Exception e){
        e.printStackTrace();
    }
}

public void reset(){
    try {
        reader.reset();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

这就是问题所在。当我在我的主要方法中并执行以下操作时:

public static void main(String [] args){
    CommandLine cmd = new CommandLine();
    cmd.connect();
    cmd.sendCommand("dir");
    cmd.getContent();
    System.out.println("Here");
}

“这里”永远不会被打印出来。所以我很好奇我做错了什么。另外我希望能够发送一个命令,然后只读取那个响应。我在想也许我可以在阅读器上使用 reset() 来做到这一点,但我不确定。如果这还不够清楚,我的意思是我不希望响应只是附加到 StringBuffer 或类似的东西。

任何帮助将不胜感激

【问题讨论】:

  • 读取正在运行的进程的响应将不会完成,因为它没有到达 EOF...
  • 有没有办法让我可以阅读回复并让他们完成?
  • 制作命令外壳比您尝试做的要复杂得多。最好的办法是启动和 cmd 进程,包含您的命令 (dir),然后完成 cmd 进程,这样您就可以从该进程中获取输出。您一次只能处理一个命令。
  • 我知道制作 shell 很困难。我用java做了很多,我从来没有接触过创建shell。我想我会把它作为一个副项目来试一试。如果你能带领我走上正确的道路,那就太好了。不要求代码或任何东西,只是一个开始的地方。无论是使用 Socket 连接还是完全不同

标签: java shell process bufferedreader bufferedwriter


【解决方案1】:

您可以使用现有的库来执行命令行:http://commons.apache.org/proper/commons-exec/tutorial.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多