Omi*_*mid 5 java command processbuilder
我有一个ProcessBuilder:
String src = c:/hello/
String dst = c:/hello/2
ProcessBuilder builder = null;
builder = new ProcessBuilder("c:/file/file.exe", "-i", src, "-f", "-l 500", dst);
builder.redirectErrorStream(true);
process = builder.start();
Run Code Online (Sandbox Code Playgroud)
问题是,只要我添加,"-l 500"我得到输出:
"l 500"无效命令
即使我已经输入"-l 500"而不是"l 500".如果我输入"--l 500"我得到:
"-l 500"无效命令
即使-l 500在命令提示符下运行它是一个有效的命令.
如果我删除"-l 500"它再次工作.
我使用Processbuilder错了吗?
编辑:
好吧,如果我将"-l"和"500"作为单独的条目,它似乎有效:
new ProcessBuilder("c:/file/file.exe", "-i", src, "-f", "-l", "500", dst);
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我不能把一个带空格的命令作为同一个条目吗?
在命令提示符下运行它时,不要包含-l 500引号,因此它们被视为两个不同的参数.在命令行输入:
file.exe -i some_source -f"-l 500"some_dest
我希望您会看到与错误ProcessBuilder使用时相同的错误消息.该file.exe程序必须解析命令行,搜索与领先的字符串-的字符.当它找到单个字符串时,"-l 500"它会删除-并且不会识别l 500为有效参数.
参数ProcessBuilder类似于命令行上的引用参数.
我在使用 ffmpeg 命令时遇到了同样的问题,其中我有许多带有值的参数。我最终创建了一个 ArrayList 并将每个项目一项一项地添加到列表中。下面是一个例子:
List<String> command = new ArrayList<>();
command.add(ffmpegCommand);
command.add("-re");
command.add("-i");
command.add(videoFile);
command.add("-vcodec");
command.add("libx264");
command.add("-vcodec");
command.add("libx264");
command.add("-vb");
command.add("500000");
command.add("-g");
command.add("60");
command.add("-vprofile");
command.add("main");
command.add("-acodec");
command.add("aac");
command.add("-ab");
command.add("128000");
command.add("-ar");
command.add("48000");
command.add("-ac");
command.add("2");
command.add("-vbsf");
command.add("h264_mp4toannexb");
command.add("-strict");
command.add("experimental");
command.add("-f");
command.add("mpegts");
command.add("udp://127.0.0.1:10000?pkt_size=1316");
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process process;
try {
process = pb.start();
process.waitFor();
if (process.exitValue() == 0) {
// success
} else {
// failure
}
} catch (IOException | InterruptedException e) {
// handle exception
}
Run Code Online (Sandbox Code Playgroud)
哪里ffmpegCommand是命令videoFile的完整路径,是视频的完整路径。这是我能够让命令成功运行的唯一方法。
| 归档时间: |
|
| 查看次数: |
5538 次 |
| 最近记录: |