当前位置: 首页 > 面试题库 >

从Java代码获取cmd命令的输出

柯天宇
2023-03-14
问题内容

我有一个程序,可以从我的代码成功执行cmd命令,但我希望能够从cmd命令获取输出。我怎样才能做到这一点?

到目前为止,我的代码是:

Second.java:

public class Second {
    public static void main(String[] args) {
        System.out.println("Hello world from Second.java");
    }
}

和Main.java

public class Main {
    public static void main(String[] args) {
        String filename = args[1].substring(0, args[1].length() - 5);
        String cmd1 = "javac " + args[1];
        String cmd2 = "java " + filename;

        Runtime r = Runtime.getRuntime();
        Process p = r.exec(cmd1); // i can verify this by being able to see Second.class and running it successfully
        p = r.exec(cmd2); // i need to see this output to see if

        System.out.println("Done");
    }
}

我可以通过检查Second.class来检查第一个命令是否正常工作,但是如果该类产生了一些错误,我将如何看到该错误呢?


问题答案:

您需要流程的OutputStream(InputStream)(并且应该使用ProcessBuilder)…就像这样

public static void main(String[] args) {
  String filename = args[1].substring(0, args[1].length() - 5);
  String cmd1 = "javac " + args[1];
  String cmd2 = "java " + filename;

  try {
    // Use a ProcessBuilder
    ProcessBuilder pb = new ProcessBuilder(cmd1);

    Process p = pb.start();
    InputStream is = p.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line = null;
    while ((line = br.readLine()) != null) {
      System.out.println(line);
    }
    int r = p.waitFor(); // Let the process finish.
    if (r == 0) { // No error
       // run cmd2.
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
}


 类似资料:
  • 问题内容: 嗨,我是一名初学者应用程序开发人员,我选择了phonegap,请在将android作为我的项目平台添加时查看问题。代码如下: 更新:谢谢,我认为它向前移动了一点,但现在它显示了这一点: 问题答案: 请在您的PATH变量中添加 C:\ Windows \ System32

  • 问题内容: 我正在使用运行时从Java程序运行命令提示符命令。但是,我不知道如何获得命令返回的输出。 这是我的代码: 我尝试做,;但是没有返回任何东西。该命令的执行应返回两个数字,以分号分隔。我怎样才能在变量中打印出来? 这是我现在使用的代码: 但是我没有得到任何输出,但是当我自己运行该命令时,它可以正常工作。 问题答案: 这是要走的路:

  • 我想一个接一个地从java代码中成功地运行多个cmd命令。 我想使用这个创建ssh连接的命令行应用程序,我想像在正常的命令提示符窗口中一样连续运行多个命令,而不需要实际关闭会话。我在java中找到的关于运行cmd命令的大多数答案都谈到了运行单个命令然后停止。就像这个问题的答案: 通过java运行cmd命令 我需要将命令的输出重定向到控制台,并从控制台获取新命令作为输入。有点像用java代码模拟cm

  • 我该如何做到这一点,特别是因为您似乎无法真正运行中的任何类型的groovy代码?

  • 我试图调用cmd命令从Java使用进程构建器。然而,我面临的问题很少。 > 这个程序有时没有给出正确的输出。如果我使用process.destroy()方法并得到exitValue,它显示1。如果我注释掉process.destroy()方法,异常出现,进程没有退出。我猜可能是线程竞争条件。但是,没有process.waitFor()的影响。它有时仍然会产生错误的输出。我们如何测试这些情况并找出问

  • 问题内容: 我的最终目标是捕获终端中执行的上一条命令。由于〜/ .bash_history不包含当前终端会话中的命令,因此我不能简单地读取该文件。 在另一个线程中,我找到了以下脚本: 这与我要查找的内容非常接近,但是由于它是作为子进程启动的,因此它也不会包括当前终端会话的历史记录。有什么办法可以在当前shell中执行类似的命令? 问题答案: 为什么不直接读取文件。 〜/ .bash_history