2012-09-11 20 views
5

私は通常、外部コマンドラインプログラムを実行するためにjava.lang.ProcessBuilderとjava.lang.Processを使用しますが、実行と終了のコマンドでうまく動作します。たとえば、これは作業ディレクトリに引数を指定して「MYPROGRAM」「myArg」を実行します:Javaからの対話型コマンドラインアプリケーションの実行

List<String> commandLine = new ArrayList<String>(); 
commandLine.add("myProgram"); 
commandLine.add("myArg"); 
ProcessBuilder builder = new ProcessBuilder(commandLine); 
builder.redirectErrorStream(true); 
Process process = builder.start(); 

をしかし、私は、スクリプトまたは対話型の入力を持っていたプログラムか何かを実行したいと言う(それは、複数の入力のために私を促しました開始後)。上記のコードと同様のコードでJavaでこれを行うことはできますか、別の方法が必要ですか?それとも私に助けてくれるライブラリがありますか?

答えて

4

the documentationによれば、入力ストリームと出力ストリームをリダイレクトできるはずです。これは、親プロセスからSystem.in/System.outを使用するように指示します:

builder.redirectInput(ProcessBuilder.Redirect.INHERIT); 
builder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 

あなたはプロセスの入力に物事を書きたい場合:

ソースはRedirect.PIPE(初期値)である場合Process.getOutputStream()が返す出力ストリームを使用して、サブプロセスの標準入力を書き込むことができます。ソースが他の値に設定されている場合、Process.getOutputStream()はnull出力ストリームを返します。

+0

stdinとstdoutはSystem.inとSystem.outを意味しますか? – 11684

+0

@ 11684はい、回答を更新しました。 –

+0

ありがとう!これはかなりしばらく探していました。 – dantiston

0

単純なコマンドラインプログラムでは、stdinとstdoutのリダイレクトは確かに1つのオプションです。あなたが実際に(例えば、テストスクリプトで)スクリプトのキーストロークに必要がある場合は、 "ロボット" クラスを使用して

は、別です:

Javaプログラムを呼び出し、 "<"と ">"リダイレクション演算子を使用するシンプルな.batファイルまたはシェルスクリプトを書くことはまだです3番目のオプション。

これはすべてあなたが探しているものに依存します:)

+0

私は基本的に、強制的に--forceフラグや同等のものを持たないプログラムの確認プロンプトを強制したいと思っています。 – smcg

+0

シェルスクリプトでプログラムを実行できますか? 「はい」の場合はそれで十分でしょうか? – paulsm4

+0

それはクルージュだろう。 – smcg

関連する問題