【问题标题】:Java sub-processes for executing KornShell (ksh) commands用于执行 KornShell (ksh) 命令的 Java 子进程
【发布时间】:2013-09-10 01:01:45
【问题描述】:

我想使用 java.lang.Runtime 类来执行 KornShell (ksh) 命令。 Java 打印任何特定命令的标准输出和标准错误的最佳方式是什么?

所以,如果我声明

    Process command = Runtime.getRuntime.exec("ls -l");

我将如何进行?

【问题讨论】:

    标签: java shell unix process subprocess


    【解决方案1】:

    java.lang.Process 允许您检索输入流(您的进程的输出通过管道输入)。从那里你可以使用standard IO techniques to process it。以下示例将通过 shell 命令将所有输出打印到 System.out 中,直到遇到 EOF。

    Process process = runtime.exec("ls -l");
    InputStream inputStream = process.getInputStream();
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    
    for(String line = bufferedReader.readLine(); line != null; line = bufferedReader.readLine()) {
      System.out.println("Process output: " + line);
    }
    

    请对java并发有一些基本的了解。如果您正在运行的命令是非终止的,那么上述循环将继续运行

    【讨论】:

    • 看起来像“wc file.java”这样的命令会跳过这个循环。如何获得像“wc file.java”这样的命令的标准输出/错误?
    • 上例只读取stdout,要读取sterr,使用getErrorStream()。请阅读 java.lang.Process javadoc:docs.oracle.com/javase/6/docs/api/java/lang/Process.html
    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 2023-03-11
    • 2017-10-27
    • 1970-01-01
    • 2012-11-03
    • 2010-09-13
    • 2021-09-08
    • 2014-03-25
    相关资源
    最近更新 更多