0

我正在尝试使用 apache-commons-exec 运行脚本,该脚本是使用 java 近似来实现的。此脚本在生产服务器 (Linux) 中执行,但我需要在我的本地主机中对其进行测试以查看一切正常。

这是我启动 cygwin 的代码,该代码在 cmd.exe 中运行,但是当我尝试使用 commons.exec 启动它时它不起作用:

    OutputStream outputStream = new ByteArrayOutputStream();
    DefaultExecutor exec = new DefaultExecutor();
    exec.setWatchdog(new ExecuteWatchdog(1000));
    PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
    exec.setStreamHandler(streamHandler);
    CommandLine cmdLine = CommandLine.parse("C:\\cygwin64\\bin\\bash");
    cmdLine.addArgument("-c");
    cmdLine.addArgument("/cygdrive/c/dev/launch.sh");
    int exit = exec.execute(cmdLine);
    logger.warn("Job exit: " + exit);

它返回 1 并且没有输出或日志错误:

org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)

有什么遗漏吗?如何正确捕获输出?

4

1 回答 1

0

有点猜测,但可能会有所帮助。

有时anexit code = 1代表“成功”。但是,Apache Commons Exec 默认将 an 解释exit code = 1为失败,ExecuteException如果有问题的脚本以 and 退出,则会抛出 an exit code = 1

您可以使用以下代码告诉您DefaultExecutor“ =成功”:exit code = 1

exec.setExitValue(1);

可能不是原因,但值得一试。

于 2016-03-23T10:57:51.153 回答