3

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

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

那么,如何捕获 DOS 的输出并将其插入 JAVA 应用程序?

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


在crowder的评论之后,我运行了这段代码。但输出始终是:

错误:进程说:

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);
    }
}

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

4

2 回答 2

3

您可以通过 a 执行该过程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周围使用 a InputStreamReader,但你明白了。)

于 2012-05-24T10:28:29.470 回答
0

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

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

于 2012-05-24T10:28:19.920 回答