gpt4 book ai didi

java - Runtime.exec 没有运行但没有异常

转载 作者:行者123 更新时间:2023-11-29 07:58:54 26 4
gpt4 key购买 nike

我想使用 java 在特定位置运行脚本。如果我手动运行脚本运行良好:

     /export/home/trace.sh param1 param2 param3 param4

这是我从 java 运行脚本的代码:

     try {

Runtime runtime = Runtime.getRuntime();
Process proc = null;
System.out.println("starting search");
proc = runtime.exec( pathServer + "/trace.sh " + fullDate + " " + fullDateTo + " " + mA.substring(2) + " " + mB.substring(2));
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
System.out.println("end search " + System.currentTimeMillis());
}
catch (Exception e)
{
System.out.println(e.toString());
e.printStackTrace();
}

如果脚本运行,它会在指定位置生成“txt.dat”。但是没有生成“txt.dat”。我试图弄清楚异常是什么,但没有捕获到异常。

我的代码已经正确了吗?我怎么知道它是否正在处理脚本?我怎样才能捕捉到过程中发生的任何异常?谢谢。


更新 2

我添加了一些代码来打印 getInputStreamgetErrorStream。对于 getInputStream,我什么也没得到,这意味着它为空。对于 getErrorStream,我得到了这个结果

         Host key verification failed

我仍然不知道这个错误是什么意思。

Java 应用程序在服务器 B 中运行。

通常,我尝试调用的脚本(在服务器 B 中)将通过 ssh 连接到服务器 A 并在服务器 A 中运行其他脚本。它将生成 text.dat,然后通过 sftp 发送到服务器 B。手动运行时,txt .dat成功生成并传输到服务器B。


更新 3

感谢所有的帮助和建议。事实证明,我的 java 应用程序在不同的用户下运行。当我手动运行它时,我使用了另一个用户。所以,我已经将服务器 B 的主机 key 添加到服务器 A。它现在成功运行了。

最佳答案

Runtime.exec 如果您的命令失败,则不会抛出异常。

您可以使用 process.exitValue() 获取执行结果。

您还可以从 process.getInputStream() 读取脚本输出,您在代码中创建了它,但由于某种原因没有读取。在脚本中放入一些 echo 语句进行调试。

关于java - Runtime.exec 没有运行但没有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15779254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com