3

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

誰が私が間違っているのか教えてもらえますか??

4

2 に答える 2

3

を介してプロセスを実行できます。これにより、 から返されたストリームを介して出力を読み取ることができるインスタンスProcessBuilderが得られます。ProcessgetInputStream

hello.pyPython スクリプトを実行し、その出力を文字列に構築する例を次に示します。

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を使用しながら、エラーと入力ストリームに接続できますProcessBuilder

例はここにあります: http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html

于 2012-05-24T10:28:19.920 に答える