10

私は通常、java.lang.ProcessBuilderとjava.lang.Processを使用して外部コマンドラインプログラムを実行しますが、実行および実行コマンドでは正常に機能します。たとえば、これは作業ディレクトリで引数「myArg」を指定して「myProgram」を実行します。

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

2 に答える 2

6

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

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

プロセスの入力に何かを書きたい場合:

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

于 2012-09-11T19:59:19.117 に答える
0

stdinとstdoutのリダイレクトは、確かに単純なコマンドラインプログラムの1つのオプションです。

実際にキーストロークをスクリプト化する必要がある場合(たとえば、テストスクリプトで)、「ロボット」クラスの使用は別の方法です。

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

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

于 2012-09-11T20:06:43.310 に答える