我试图将一些纯文本密钥传递给第三方外部程序,然后将输出捕获到字符串。所有似乎都在工作,除了第三方程序不接受输入为“正常”。我收到“输入太长”的错误。但是当在bash shell中将同一组文本运行到同一个二进制文件时,它会按预期工作。我似乎无法找到任何附加额外字符的东西。
我一直关注此示例:How to pipe a string argument to an executable launched with Apache Commons Exec?
FUN()
如果我是正确的,这应该与在shell中输入相同
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");
}
哪个有效。我可以让stderr打印得很好,甚至得到stdout(由于密钥被拒绝,它恰好是空白的)任何帮助都是值得赞赏的。
答案 0 :(得分:1)
第三方程序需要输入流中的终止换行(当echo
命令放入其输出时),因此以下内容应该有效(由@Neurobug确认):
ByteArrayInputStream stdin = new ByteArrayInputStream((text + "\n").getBytes("UTF-8"));