捕获DOS的输出(命令提示符)并显示在JAVA框架中

时间:2012-05-24 10:25:21

标签: java capture

当我运行python脚本时,输出显示在DOS上(Windows中的命令提示符)。

我希望输出显示在JAVA应用程序上,即在包含JTextArea的窗口上。输出应该与DOS上的输出相同。

所以,如何从DOS捕获输出并将其插入JAVA应用程序?

(我尝试将python脚本的输出存储在文本文件中,然后使用JAVA读取它。但是,在这种情况下,JAVA应用程序等待脚本先完成运行然后显示输出。并且,当输出超过屏幕大小,滚动条会出现,这样我就可以看到整个输出。)


在众人评论之后,我运行了这段代码。但输出总是:

错误: 流程说:

import java.io.*;
import java.lang.*;
import java.util.*;
class useGobbler {
        public static void main ( String args[] )
        {
        ProcessBuilder pb; 
        Process p;
        Reader r;
        StringBuilder sb;
        int ch;

        sb = new StringBuilder(2000);

        try
        {
            pb = new ProcessBuilder("python","printHello.py");
            p = pb.start();

            r = new InputStreamReader(p.getInputStream());
            while((ch =r.read() ) != -1)
            {
                sb.append((char)ch);
            }

        }
        catch(IOException e)
        {
            System.out.println("error");

        }

        System.out.println("Process said:" + sb);
    }
}

谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:3)

您可以通过ProcessBuilder执行此过程,这将为您提供Process实例,您可以通过getInputStream返回的流读取输出。

这是一个运行Python脚本hello.py并在字符串中构建其输出的示例:

import java.io.Reader;
import java.io.IOException;
import java.io.InputStreamReader;

public class RunPython {
    public static final void main(String[] args) {
        ProcessBuilder  pb;
        Process         p;
        Reader          r;
        StringBuilder   sb;
        int             ch;

        // Start the process, build up its output in a string
        sb = new StringBuilder(2000);
        try {
            // Create the process and start it
            pb = new ProcessBuilder("python", "hello.py");
            p = pb.start();

            // Get access to its output
            r = new InputStreamReader(p.getInputStream());

            // Read until we run out of output
            while ((ch = r.read()) != -1) {
                sb.append((char)ch);
            }
        }
        catch (IOException ex) {
            // Handle the I/O exception appropriately.
            // Here I just dump it out, which is not appropriate
            // for real apps.
            System.err.println("Exception: " + ex.getMessage());
            System.exit(-1);
        }

        // Do what you want with the string; in this case, I'll output
        // it to stdout
        System.out.println("Process said: " + sb);
    }
}

然后,您可以使用字符串执行任何您喜欢的操作,包括将其放在JTextArea中,就像任何其他字符串一样。 (如果您愿意,可以在BufferedReader周围使用InputStreamReader,但是您明白了。)

答案 1 :(得分:0)

使用Runtime.exec()ProcessBuilder时,您可以连接到错误和inputStream。

示例可以在这里找到: http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html