当前位置: 首页 > 面试题库 >

在Runtime()。exec()正常运行的情况下,ProcessBuilder在Mac上提供了“无此类文件或目录”

陶沛
2023-03-14
问题内容

我有一个在Playframework上运行的应用程序,该应用程序需要对一些视频文件进行编码。我用了

Process pr = Runtime.getRuntime().exec(execCode)

为此(它完美地工作),但是由于我需要输出流和错误流,因此我尝试使用ProcessBuilder(也建议这样做)。

但是我无法使其正常工作(在MacBook上测试)。Runtime方法和ProcessBuilder之间有根本区别吗?

这是我的ProcessBuilder代码(由完全相同的代码可以工作Runtime.getRuntime().exec()

    String execCode = "/opt/local/bin/ffmpeg -i file [...]"; 
    ProcessBuilder pb = new ProcessBuilder(execCode);
    pb.redirectErrorStream(true);
    pb.directory(new File("/Users/[...]/data/"));
    Process pr = pb.start();

这是控制台输出:

11:00:18,277 ERROR ~ There was a problem with with processing MediaFile[13] with error Error during coding process: Cannot run program "/opt/local/bin/ffmpeg -i /Users/[...]/data/media/1/1/test.mov [...] /Users/[...]/data/media/1/13/encoded.mp3" (in directory "/Users/[...]/data"): error=2, No such file or directory
java.lang.Exception: Error during coding process: Cannot run program "/opt/local/bin/ffmpeg -i /Users/Luuk/Documents/Java/idoms-server/data/media/1/1/test.mov -y -f mpegts -acodec libmp3lame -ar 48000 -b:a 64000 -vn -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate -1 -bufsize -1 -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30  -g 30 -async 2 /Users/Luuk/Documents/Java/idoms-server/data/media/1/13/encoded.mp3" (in directory "/Users/Luuk/Documents/Java/idoms-server/data"): error=2, No such file or directory
    at logic.server.MediaCoder.encodeMediaFile(MediaCoder.java:313)
    at logic.server.MediaCoder.doJob(MediaCoder.java:54)
    at play.jobs.Job.doJobWithResult(Job.java:50)
    at play.jobs.Job.call(Job.java:146)
    at play.jobs.Job$1.call(Job.java:66)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)
Caused by: java.io.IOException: Cannot run program "/opt/local/bin/ffmpeg -i /Users/Luuk/Documents/Java/idoms-server/data/media/1/1/test.mov -y -f mpegts -acodec libmp3lame -ar 48000 -b:a 64000 -vn -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate -1 -bufsize -1 -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30  -g 30 -async 2 /Users/Luuk/Documents/Java/idoms-server/data/media/1/13/encoded.mp3" (in directory "/Users/Luuk/Documents/Java/idoms-server/data"): error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at logic.server.MediaCoder.encodeMediaFile(MediaCoder.java:189)
    ... 11 more
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:53)
    at java.lang.ProcessImpl.start(ProcessImpl.java:91)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
    ... 12 more

问题答案:

您需要将参数指定为单独的Strings

new ProcessBuilder("cmd", "arg1", "arg2", ...);

构造函数接受StringvarargsList<String>

请参阅ProcessBuilder文档。



 类似资料:
  • 我正在尝试将Cucumber集成到现有的Spring Boot项目中 当前项目是单个Maven模块 单元测试(不含Spring上下文)和集成测试(含Spring上下文)组合在同一个测试文件夹中。 我想做的是能够调整我的单元测试和集成测试。 但是一旦我添加了依赖项(为了能够在规范旁边运行Spring上下文),它就要求文件夹中的所有测试都用注释。 下面是我的测试套件,配置为获取测试规范。 是否可以将两

  • 所以我制作了一个脚本,读取一堆文本文件(每首歌一个)作为歌词。它的工作原理是你输入一个歌词短语,然后脚本扫描所有可用文件中的歌词,并告诉你歌曲的名称。问题是斜杠不起作用。我更改了“/”和“\”之间的斜杠,但遇到了错误。 当我使用正斜杠时,我看到以下内容: “OSError:[Errno 22]无效参数:'C:/Users/[My Name]/Desktop/MusicLyricSearch/All

  • 问题内容: 这个问题已经在这里有了答案 : MySQL连接无法正常工作:2002没有这样的文件或目录 (21个答案) 4年前关闭。 从git中提取一个运行良好的laravel项目到运行MAMP的Mac中。项目在Linux机器上完美运行。 作曲家安装 php artisan migration,出现以下错误: SQLSTATE[HY000] [2002] No such file or direct

  • 我必须通过另一个程序java use runtime运行java类。exec()。文件夹中的一个类与我的程序不同,因此我无法运行它。我使用了(java-cp“directory”类),但my类有导入文件,所以找不到filenotfound?谁能帮我? Process pro=Runtime.getRuntime(). exec("java-cp\"E:\DA_Laptrinhmang\"Nguye

  • 问题内容: 我正在尝试在IntelliJ上运行我的android应用程序。我从现有来源创建了一个项目,并且正确连接了SDK,一切正常,直到在那里,但是当我尝试运行时,它会记录以下消息: 这在我创建的所有类中都会发生。 对可能发生的事情有任何想法吗?也许我必须在IDE中进行一些设置。 谢谢。 问题答案: 解决了!在intelliJ中,转到 “设置” >“编译器”>“ Java编译器”,然后在“ 使用