一 java 调用外部命令的方式
一般调用的方式如下:
- Process pid = null;
- String[] cmd = { "/bin/sh", "-c", "shellCommand" };
- pid = Runtime.getRuntime().exec(cmd);
- bufferedReader = new BufferedReader(new InputStreamReader(pid.getInputStream()), 1024);
- String line = null;
- while (bufferedReader != null && (line = bufferedReader.readLine()) != null) {
- System.out.println(line);
- }
- pid.waitFor();
- int success = pid.exitValue();
- pid.destroy();// to kill the subprocess
说明:
redirectErrorStream(boolean redirectErrorStream)方法,
让错误输出流与标准输出合起来,之后就可以在主线程中来process.getInputStream()就可以获得所有的输出。
- String[] cmd = { "/bin/sh", "-c", shellCommand };
- Process pid = null;
- ProcessBuilder build = new ProcessBuilder(cmd);
- build.redirectErrorStream(true);
- pid=build.start();
- bufferedReader = new BufferedReader(new InputStreamReader(pid.getInputStream()), 1024);
- class StreamGobbler extends Thread
- {
- InputStream is;
- String type;
- StreamGobbler(InputStream is, String type)
- {
- this.is = is;
- this.type = type;
- }
- public void run()
- {
- try
- {
- InputStreamReader isr = new InputStreamReader(is);
- BufferedReader br = new BufferedReader(isr);
- String line=null;
- while ( (line = br.readLine()) != null)
- System.out.println(type + ">" + line);
- } catch (IOException ioe)
- {
- ioe.printStackTrace();
- }
- }
- }
使用方法:
- Process proc = Runtime.getRuntime().exec("java com.zjdw.course.Assign " + path);
- new StreamGobbler(proc.getInputStream(),"INFO").start();
- new StreamGobbler(proc.getErrorStream(),"ERROR").start();
- int status = proc.waitFor();