Run external program from Java, read output, allow interruption

前端 未结 5 1121
孤独总比滥情好
孤独总比滥情好 2020-11-29 08:18

I want to launch a process from Java, read its output, and get its return code. But while it\'s executing, I want to be able to cancel it. I start out by launching the proce

5条回答
  •  -上瘾入骨i
    2020-11-29 09:21

    Here's an example of what I think you want to do:

    ProcessBuilder pb = new ProcessBuilder(args);
    pb.redirectErrorStream(true);
    Process proc = pb.start();
    
    InputStream is = proc.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    
    String line;
    int exit = -1;
    
    while ((line = br.readLine()) != null) {
        // Outputs your process execution
        System.out.println(line);
        try {
            exit = proc.exitValue();
            if (exit == 0)  {
                // Process finished
            }
        } catch (IllegalThreadStateException t) {
            // The process has not yet finished. 
            // Should we stop it?
            if (processMustStop())
                // processMustStop can return true 
                // after time out, for example.
                proc.destroy();
        }
    }
    

    You can improve it :-) I don't have a real environment to test it now, but you can find some more information here.

提交回复
热议问题