プレーン テキスト キーをサード パーティの外部プログラムに渡して、出力を文字列にキャプチャしようとしています。サードパーティのプログラムが入力を「通常」として受け入れないことを除いて、すべてが機能しているようです。「入力が長すぎます」というエラーが表示されます。ただし、bash シェルで同じバイナリに対して同じテキスト セットを実行すると、意図したとおりに動作します。余分な文字を追加するものは何も見つからないようです。
私はこの例に従っています:Apache Commons Execで起動された実行可能ファイルに文字列引数をパイプする方法は?
public String run(List<String> keys) throws ExecuteException, IOException{
//String text = String.join(System.lineSeparator(), keys);
String text = "9714917";
CommandLine cmd = new CommandLine("/third/party/bin/program");
Executor executor = new DefaultExecutor();
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
ByteArrayOutputStream stderr = new ByteArrayOutputStream();
ByteArrayInputStream stdin = new ByteArrayInputStream(text.getBytes("UTF-8"));
PumpStreamHandler streamHandler = new PumpStreamHandler(stdout, stderr, stdin);
executor.setStreamHandler(streamHandler);
executor.setWatchdog(new ExecuteWatchdog(10000));
executor.execute(cmd,environment);
return stdout.toString("UTF-8");
}
私が正しければ、これはシェルで入力するのと同じはずです
echo "9714917" | /third/party/bin/program
動作します。stderr を正常に出力でき、stdout を取得することもできます (キーが拒否されたため、これはたまたま空白になっています)。