Apache Commons exec输入问题

时间:2015-05-20 16:46:03

标签: java apache-commons-exec

我试图将一些纯文本密钥传递给第三方外部程序,然后将输出捕获到字符串。所有似乎都在工作,除了第三方程序不接受输入为“正常”。我收到“输入太长”的错误。但是当在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(由于密钥被拒绝,它恰好是空白的)任何帮助都是值得赞赏的。

1 个答案:

答案 0 :(得分:1)

第三方程序需要输入流中的终止换行(当echo命令放入其输出时),因此以下内容应该有效(由@Neurobug确认):

ByteArrayInputStream stdin = new ByteArrayInputStream((text + "\n").getBytes("UTF-8"));