【发布时间】:2015-06-27 12:33:27
【问题描述】:
我试图从我的 java 代码中运行 .sh 文件。我见过类似的问题 (How to run Unix shell script from Java code?) 并尝试了那里写的答案。但是,我希望进程退出值将是 0(正常终止),而实际上我得到了 127。这是我的代码:
public int performATRs() throws IOException{
String[] command = {"sh", "/ThematicAnalysis/flexiTerm/FlexiTerm.sh"};
Process process = Runtime.getRuntime().exec(command);
InputStream inputStream = process.getInputStream();
InputStreamReader streamReader = new InputStreamReader(inputStream);
BufferedReader bufReader = new BufferedReader(streamReader);
try{
process.waitFor();
System.out.println("Waiting...");
System.out.println("Returned Value :" + process.exitValue());
}catch(InterruptedException e){
System.out.println(e.getMessage());
}
while(bufReader.ready())
System.out.println(bufReader.readLine());
return process.exitValue();
}
我尝试从我的 java 代码中运行 FlexiTerm.sh。当我从终端运行它时它可以工作。非常感谢您的帮助:)
【问题讨论】:
-
不工作是什么意思?没有输出还是有任何异常?
-
感谢您的回复。当我尝试返回 process.exitValue() 时,我得到 1 而不是 0(正常终止)@my-thoughts
-
您在这段代码中只使用了一个线程,然后在您的进程能够将任何信息传回给您之前,通过调用
waitFor()来阻塞这个单线程。考虑 1) 为错误流和输入流获取 BufferedReader,在它们自己的线程中和在调用waitFor()之前开始读取流。。跨度> -
恐怕我不太明白你的意思。你能给我举个例子吗?欢呼
-
什么你不明白如何创建一个新线程?与其问我们任何人的一项重大任务,不如在您的问题中非常具体。您肯定已经查找过此类事情的示例,并且已经看到用于执行此操作的线程,对吗?再次,请澄清您对此感到困惑的地方。