【问题标题】:Getting response from shell command to Java code从 shell 命令获取对 Java 代码的响应
【发布时间】:2014-03-04 06:15:31
【问题描述】:

我正在使用 net.neoremind.sshxcute SSH Java API 库连接到 sftp 服务器并执行该服务器上的 shell 脚本。

我的 Shell 脚本执行一项简单的工作,将文件从该 SFTP 位置移动到其他机器上的 HDFS 位置。

目前无法报告是否有任何文件因连接失败、文件名非法、文件为空等原因而未移动。

我想知道,如何显示每个失败文件的信息集从 shell 命令移回 Java 代码?

这是我的示例代码:

// e.g sftpScriptPath => /abc/xyz
// sftpScriptCommand => sudo ./move.sh
// arguments => set of arguments to shell script.
task = new ExecShellScript(sftpScriptPath, sftpScriptCommand, arguments);
result = m_SshExec.exec(task);
if(result.isSuccess && result.rc == 0)
{
     isSuccessful = true;
     s_logger.info("Shell script executed successfully");
     s_logger.info("Return code : " + result.rc);
     s_logger.info("Sysout : " + result.sysout);
}
else
{
     isSuccessful = false;
     s_logger.info("Shell script execution failed");
     s_logger.info("Return code : " + result.rc);
     s_logger.info("Sysout : " + result.sysout);
}

【问题讨论】:

  • 从shell脚本你只能得到一个表示成功或失败的返回值,但是你可以安排你的脚本将每次失败的原因写入日志文件,当脚本报告失败时,你的Java代码可以从该日志文件中了解这些原因。

标签: java api shell unix ubuntu


【解决方案1】:

exec方法调用返回的Result对象包括:

  • 退出状态或返回码 (Result.rc),
  • 标准输出(stdout)(Result.sysout),
  • 标准错误 (stderr) (Result.error_msg),以及
  • 成功的标志,based on return code and output (Result.isSuccess)。

因此,如果您致力于使用sshxcute 框架执行shell 脚本的当前方法,那么最简单的方法是让move.sh 脚本在移动文件时提供有关任何失败的信息。这可以通过返回代码和标准输出 (stdout) 和/或标准错误 (stderr) 消息的组合来完成。然后,您的 Java 代码将从返回的 Result 对象中获取此信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    相关资源
    最近更新 更多