2016-06-13 10 views
2

unixコマンドを入力し、そのunixコマンドの出力を出力するためにこの関数を作成しました。しかし、私は使用しているunixコマンドに問題があります。 "ls"はファイルのリストを出力しますが、 "ls -lart"を実行するとnullを出力します。デバッグに問題があるか、なぜこれが機能しないのか。以下のコード。バッファ付きリーダー実行時execコマンドの出力

コンソールと対話するとき、あなたはコンソール自体をexecし、その後、コマンドを送信するプロセスの入力ストリームを使用する必要があります
private String[] unixCommand (String command, Boolean boolOutput) throws IOException, InterruptedException{ 
    Process run; 
    int i = 0; 
    String output = ""; 
    String[] finalOutput = new String[1000]; 
    sendToProcessView("Unix Command: " + command); 
    run = Runtime.getRuntime().exec(command); 
    run.waitFor(); 
    sendToProcessView("In Unix Command"); 
    if (boolOutput == true){   
     sendToProcessView("In Output Mode of Unix Command"); 
     BufferedReader stdInput = new BufferedReader(new InputStreamReader(run.getInputStream())); 
     sendToProcessView("Passed Buffer Reader"); 
     while ((output = stdInput.readLine()) != null) { 
      sendToProcessView("Output: " + output); 
      finalOutput[i] = output; 
      i++; 
     } 
    } 
    return finalOutput; 
} 
+0

コール 'run.waitFor()'あなたの後のように、「終了」を送信し、結果を読んで、あなたがた道を、またはねじ切りリスナーを使用してプロセスをシャットダウンすることができますコマンドの出力を消費しています。 – VGR

+0

"ls"コマンドを受け付けるが、 "ls Main *"コマンドはワイルドカードで受け取らないことがわかった。 – Devilishdil24

+0

見つかった – Devilishdil24

答えて

1

、例えば(擬似コード - 私は私の場所からJavaコードをテストするために設定していないよ、ごめん)

sendToProcessView("Unix Command: " + command); 
run = Runtime.getRuntime().exec("bash"); 
PrintStream in = new PrintStream(run.getOutputStream()); 
in.println("ls -lart"); 

あなたはその後、DataFetcher

+0

PrintStreamはコンストラクターエラーを出しましたが、プロセスを終了することがベストプラクティスであることに同意しますが、ヌル問題を修正しませんでした。 – Devilishdil24

+0

私はコードスニペットを修正しました。これは今run.getOutputStream()(getInputStream()でした) – ControlAltDel

+0

残念ですが、ターミナルには表示されません。関数から値を戻します。 – Devilishdil24

関連する問題