ProcessBuilder工具类及执行多条命令

public class ProcessUtil {
    
    

    private static final Logger logger = LoggerFactory.getLogger(ProcessUtil.class);

    private static final Integer WAIT_TIME = 20;

    /**
     * 执行脚本命令
     * @param commands
     * @throws
     */
    public static Integer exec(List<String> commands, StringBuffer outPutResult) throws Exception{
    
    

        String[] arrCommands = list2Array(commands);
        ProcessBuilder processBuilder =  new ProcessBuilder(arrCommands);
        processBuilder.redirectErrorStream(true);
        Process process = null;
        try {
    
    
            process = processBuilder.start();
            final BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8));

            new Thread(() -> {
    
    
                try {
    
    
                    String str;
                    while ((str = br.readLine()) != null) {
    
    
                        if(outPutResult != null){
    
    
                            outPutResult.append(str);
                        }else{
    
    
                            logger.info(str);
                        }
                    }
                }catch (Exception e) {
    
    
                    logger.error("获取子进程输出错误:", e);
                }
            });

            process.waitFor(WAIT_TIME, TimeUnit.SECONDS);
            return process.exitValue();
        } finally {
    
    
            if(process != null){
    
    
                process.destroy();
            }
        }
    }

    /**
     * List转String
     * @param commands
     * @return
     */
    private static String[] list2Array(List<String> commands){
    
    
        String[] commends = new String[commands.size()];
        commands.toArray(commends);
        return commends;
    }
}

执行多条命令:

 * List<String> commend = new ArrayList<>();
 * commend.add("/bin/sh");
 * commend.add("-c");
 * //   /bin/bash -c '7zzs x /usr/data/tmp/测试.zip -o/usr/data/tmp/one/ && convmv -f GBK -t utf8 --notest -r /usr/data/tmp/one/'
 * commend.add("第1条命令 && 第2条命令 && 第3条命令 ..."); //这里可以实现执行多条linux命令
 * Process process = ProcessBuilder.exec(commend);
 * String message = ProcessBuilder.getOutput(process);
 * String error = ProcessBuilder.getError(process);
 * ProcessBuilder.destroy(process);

猜你喜欢

转载自blog.csdn.net/Linging_24/article/details/129893982