gpt4 book ai didi

java - ProcessBuilder 最后执行

转载 作者:行者123 更新时间:2023-12-04 23:28:31 27 4
gpt4 key购买 nike

我有一段类似这样的代码

File f = new File("Audio/Testing/mbgitr.wav");
try {
ProcessBuilder pb = new ProcessBuilder("bash/extractAudio.sh", f.getAbsolutePath());
pb.inheritIO();
pb.start();
}catch(IOException e){
System.out.println("Oh no!");
}
System.out.println(new File("Audio/mbgitr.wav").exists());

bash 文件将音频文件转换为不同的格式/采样率,并将其输出到文件夹 Audio。但是每当我运行这个脚本时,我都会得到以下输出:
/home/Ryan/Development/Java/Test/Audio/Testing/mbgitr.wav
mbgitr.wav
/home/Ryan/Development/Java/Test
false
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
[more ffmpeg output]

Process finished with exit code 0

似乎在运行脚本的代码之前执行了测试文件是否存在的代码行。如果我要再次运行该程序,它将输出“true”,因为该文件已在上次迭代中创建。有没有办法让 ProcessBuilder 调用的文件首先执行?提前致谢!

最佳答案

ProcessBuilder.start() 将进程作为一个单独的进程启动并继续执行。如果您需要等到该进程终止,请修改代码,如下所示。然后您将获得所需的输出。

File f = new File("Audio/Testing/mbgitr.wav");
try {
ProcessBuilder pb = new ProcessBuilder("bash/extractAudio.sh", f.getAbsolutePath());
pb.inheritIO();
Process p = pb.start(); // Get the process
p.waitFor(); // Wait until it terminates
}catch(IOException e){
System.out.println("Oh no!");
}catch(InterruptedException e){
System.out.println("InterruptedException");
}
System.out.println(new File("Audio/mbgitr.wav").exists());

关于java - ProcessBuilder 最后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31299200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com