首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将进程输出重定向到stdout

将进程输出重定向到stdout
EN

Stack Overflow用户
提问于 2009-11-14 07:04:39
回答 7查看 37.4K关注 0票数 27

我希望从Groovy程序中执行foo.bat,并将结果进程的输出重定向到stdout。Java或Groovy代码示例都可以。

foo.bat可能需要几分钟的时间才能运行并生成大量输出,因此我希望在生成输出时立即看到输出,而不是等到进程完成后才立即看到所有输出。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-11-14 07:17:47

它使用一个类来读取执行程序生成的所有输出,并将其显示在自己的stdout中。

代码语言:javascript
复制
class StreamGobbler extends Thread {
    InputStream is;

    // reads everything from is until empty. 
    StreamGobbler(InputStream is) {
        this.is = is;
    }

    public void run() {
        try {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line=null;
            while ( (line = br.readLine()) != null)
                System.out.println(line);    
        } catch (IOException ioe) {
            ioe.printStackTrace();  
        }
    }
}

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
//output both stdout and stderr data from proc to stdout of this process
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream());
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream());
errorGobbler.start();
outputGobbler.start();
proc.waitFor();
票数 35
EN

Stack Overflow用户

发布于 2014-04-29 19:49:33

使用inheritIO()方法将所有流重定向到标准输出非常简单。这会将输出打印到运行此命令的进程的stdout中。

代码语言:javascript
复制
ProcessBuilder pb = new ProcessBuilder("command", "argument");
pb.directory(new File(<directory from where you want to run the command>));
pb.inheritIO();
Process p = pb.start();
p.waitFor();

还存在其他方法,如下面提到的。这些单独的方法将帮助仅重定向所需的流。

代码语言:javascript
复制
    pb.redirectInput(Redirect.INHERIT)
    pb.redirectOutput(Redirect.INHERIT)
    pb.redirectError(Redirect.INHERIT)
票数 65
EN

Stack Overflow用户

发布于 2014-01-29 08:36:54

如果你想用更多的Groovy和更少的java来做这件事,这将打印每一行:

代码语言:javascript
复制
def cmd = "./longRunningProcess"

def process = cmd.execute()
process.in.eachLine { line -> println line }

或者,如果您想同时看到stdout和stderr

代码语言:javascript
复制
def cmd = "./longRunningProcess"

def process = cmd.execute()
process.waitForProcessOutput( System.out, System.err )
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1732455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档