目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx esp32 git docker windows idea maven esp8266 python Arduino

存档:

[ Java ] 调用本地命令

使用Java调用本地程序

 final Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c",
                String.format("/Users/liguanglei/Applications/ffmpeg-5.1.2/ffmpeg -allowed_extensions ALL -protocol_whitelist \"file\" -i %s -c copy %s", m3u8, outMp4)
        });
    
        Thread outThread = new Thread(() -> {
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println("out [" + line + "]");
                }
            } catch (Exception e) {
            }
        });
        outThread.start();

        ArrayList<String> list = new ArrayList<>();

        Thread errThread = new Thread(() -> {
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
                String line;
                while ((line = br.readLine()) != null) {
//                    System.out.println("err [" + line + "]");
                    list.add(line);
                }
            } catch (Exception e) {
            }
        });
        errThread.start();

        outThread.join();
        errThread.join();

        p.waitFor();
        p.exitValue();

执行后Process 的常用方法:

// 导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
int waitFor()
/*	如果已终止该子进程,此方法立即返回。
	如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程,0 表示正常终止 */

// 杀掉子进程
void destroy()

// 返回子进程的出口值,值 0 表示正常终止
int exitValue()

// 获取子进程的错误流
InputStream getErrorStream()
// 获取子进程的输入流
InputStream getInputStream()
// 获取子进程的输出流
OutputStream getOutputStream()

标题:[ Java ] 调用本地命令
作者:llilei
地址:http://solo.llilei.work/articles/2023/06/25/1687657183460.html