2012-03-26 16 views
2

端末コンソールを開いて、そこにコマンドを読み書きしようとしています。JavaプロセスからのInputStreamの読み込み

私のようないくつかの質問読み:そのことを Java Process with Input/Output Stream

は、端末を開き、小さなアプリケーションを構築し、コンソールにコマンドを渡すと、それはフォルダを参照のような任意のシステムCOMANDでうまく動作しますが、バックの結果を印刷することができました、ファイルやそのようなものを削除します。

問題は、コンソールから別のJavaプログラムを読み込み、その出力を読み込む必要がありますが、そのプログラムはjava.util.logging.Loggerを使用して出力の大部分を送信し、何らかの理由で起動アプリが ' Loggerが印刷するものを読んでください。

基本的に私は他のJavaアプリケーション用のラッパーのようにビルドしようとしています。なぜなら、私はそれと対話したいが、それを変更できないからです。

ありがとうございました。

EDITはここ

はコードですが、私はそれがコンソールに出力ロガープリント用「ノーマル」をstdoutにあるもののために動作しますが、ではないと述べたように、その基本的にはまた、別の質問から取られました。

package launcher; 

import java.io.*; 
import java.util.Scanner; 

public class Launcher { 

    public static void main(String[] args) throws IOException { 

     String line; 
     Scanner scan = new Scanner(System.in); 

     Process process = Runtime.getRuntime().exec("/bin/bash"); 

     OutputStream stdin = process.getOutputStream(); 
     InputStream stderr = process.getErrorStream(); 
     InputStream stdout = process.getInputStream(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(stdout)); 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin)); 

     while (scan.hasNext()) { 
      String input = scan.nextLine(); 
      if (input.trim().equals("exit")) { 

       writer.write("exit\n"); 
      } else { 
       writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n"); 
      } 
      writer.flush(); 

      line = reader.readLine(); 
      while (line != null && !line.trim().equals("--EOF--")) { 
       System.out.println("Stdout: " + line); 
       line = reader.readLine(); 
      } 
      if (line == null) { 
       break; 
      } 
     } 

    } 
} 
+0

私たちは基本的には推測していますが、ここでは推測していません...ロガーがSTD OUTに印刷している場合、これはうまくいくはずですが、ファイルに記録するか、STD ERROR 、またはこれらのものを混ぜて使用してください。 – Jon

答えて

1

任意のコード/設定を見なければ、私はどちらかのロガーは、標準エラー出力(System.errの)に書き込むように構成されていると、あなただけ(のSystem.out)標準出力を読んでいる、または他のロガーがあることを推測しますファイルに書き込むように構成されています。 DTYの答えパー

+1

あなたは完全に正しいです。私は午前4時にこれをやめるべきです。どうもありがとう。 – josephfley

0

、私はデフォルトのjava.util.loggingで考えるあなたは、このように標準出力に標準エラー出力をリダイレクトする必要がありますので、標準エラー出力を使用しています。私の経験で

ProcessBuilder builder = new ProcessBuilder("ls", "-l"); // or whatever your command is 
builder.redirectErrorStream(true); 
Process proc = builder.start(); 

FWIW、あなたがしようとしたほうが良いと思います他のJavaプログラムを、自分のプログラムでmainメソッドを起動して使用します。これは、入出力ストリームなどと競合するよりも、他のプログラムが何をするかによって異なります。

+0

はい、問題は私がstdoutを読んでいるだけで、デフォルトではLoggerはその情報をstderrに送り出していました。 – josephfley

関連する問題