スクリプトに別のコマンド ライン引数を追加したくない場合 (はるかにクリーンで堅牢です)、スクリプトの stdin に書き込む必要があります。
このスニペットは機能するはずです (Test.java):
import java.io.*;
public class Test
{
public static void main(String[] args)
{
ProcessBuilder pb = new ProcessBuilder("perl", "test.pl");
try {
Process p=pb.start();
BufferedReader stdout = new BufferedReader(
new InputStreamReader(p.getInputStream())
);
BufferedWriter stdin = new BufferedWriter(
new OutputStreamWriter(p.getOutputStream())
);
//write to perl script's stdin
stdin.write("testdata");
//assure that that the data is written and does not remain in the buffer
stdin.flush();
//send eof by closing the scripts stdin
stdin.close();
//read the first output line from the perl script's stdout
System.out.println(stdout.readLine());
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
テストするには、この短い perl スクリプト (test.pl) を使用できます。
$first_input_line=<>;
print "$first_input_line"
お役に立てば幸いです。次のStackoverflowの記事もご覧ください。
*ヨスト