这个问题已经在这里有了答案: > Executing another java program from our java program 3个
我正在研究一个Java程序,该程序在JUnit测试中调用多个Shell脚本(因此,除了.和E之外没有输出),这些脚本处理文件和sql表,然后将所述表中的数据与它们的期望值进行比较.一切都在理论上可行,但是我遇到了一个阶段性错误,其中一种类型的测试按预期工作,而另一种类型的测试在十分钟超时后失败.我将问题隔离为Shell脚本之一,但是我没有编写此脚本,因此无法以任何方式进行更改.解决此问题的最佳方法是保存相关脚本的输出,该输出来自一系列回显调用.是否有某种简单/可靠的方法来保存回声输出?我已经用谷歌搜索了一下,但是没有任何反应.我还没有尝试存储输出,因此没有尝试向您展示,但是我已经编写的可能相关的代码是:
//Currently using BufferedWriter, File, FileWriter, IOException, and Writer
import java.io.*;
//Method to write to a log file
public void record(String input) throws IOException {
writer = new BufferedWriter(new FileWriter(file,true));
writer.write(input + "\n");
writer.close();
}
Runtime rt = Runtime.getRuntime();
//Several of these since a lot of file manipulation/script running occurs
process = rt.exec("./shell.sh");
process.waitFor();
在我提出的另一个问题中,出于某些原因,有人建议不使用Runtime.exec().虽然我意识到不使用exec()的优点,但我需要使用该版本的程序.
tl; dr问题:我的Java程序能否轻松运行shell脚本并保存其回显输出?如果不是,是否有一个等号-f来读取输出?
解决方法:
要尽可能轻松地执行此操作,您应该真正使用外部进程输出的异步读写.那可能是阻塞并导致超时的原因,是脚本将其内容回显的方式,并且它们没有被使用.
I posted an answer to this exact same question a while ago,这在从外部进程中读取时在所有情况下都有效,这就是为什么不再使用Process.exec()和使用ProcessBuilder的原因.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。