2011-09-13 54 views
2

我现在从我的Java的代码启动一个shell脚本,看起来像这样:从java程序后台启动shell脚本

ProcessBuilder processBuilder = new ProcessBuilder(); 
processBuilder.directory("/directory/where/the/script/is/located/"); 
String[] command = new String[]{"sh", "myScript.sh"}; 
processBuilder.command(command); 
Map<String, String> env = processBuilder.environment(); 
//tweak the environment with needed additions 
env.put(...); 
Process p = processBuilder.start(); 

stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 
stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

// read the output from the command 
String line; 
while ((line = stdInput.readLine()) != null) 
{ 
    logger.fine(line); 
} 
p.waitFor(); 
int returnCode = p.exitValue(); 
// Return something according to the return code 
return ...; 

如果我现在要启动脚本,而不是等待它的结束(和从而失去了根据返回码返回的能力),但仍然能够事先调整环境?我应该如何继续?

谢谢

+0

不等它结束也意味着你失去了从流程中获得输出的能力,对吧? – Nivas

+0

@Nivas如果它是在不同的线程中启动的,那么过程中的stdout和stderr都可以(并且必须)被捕获 –

回答

5

只是在一个新的线程做整个事情。

将上面的全部代码包装在Runnable中,并为其启动一个线程。你的主代码可以继续做其他事情。 在runnable中,一旦您从子进程获得结果,请使用一些通知(或观察者模式)通知相关方。

相关问题