java 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();
问题是,只要我添加"-l 500"
,我就会得到输出:
"l 500" invalid command
即使我输入了"-l 500"
而不是"l 500"
。如果我输入"--l 500"
,我会得到:
"-l 500" invalid command
即使在命令提示符下运行-l 500
是有效的命令
如果我删除"-l 500"
,它会再次工作
我使用Processbuilder是不是错了
编辑:
好吧,如果我把“-l”和“500”分别作为这样的条目,它似乎是有效的:
new ProcessBuilder("c:/file/file.exe", "-i", src, "-f", "-l", "500", dst);
为什么会这样?我不能让一个命令中的空格作为同一个条目吗
# 1 楼答案
在命令提示下运行它时,不会将
-l 500
括在引号中,因此它们被视为两个不同的参数。在命令行中输入:我希望您会看到与错误使用
ProcessBuilder
时相同的错误消息。file.exe
程序必须分析命令行,搜索带有前导-
字符的字符串。当它找到单个字符串"-l 500"
时,它会删除-
,并且不会将l 500
识别为有效参数ProcessBuilder
的参数类似于命令行中引用的参数# 2 楼答案
我认为ProcessBuilder的意图是提供帮助,但它不是直观的,而且它对它的行为方式非常敏感。 不管怎么说,其他人的回答是正确的,在这里,我只是粘贴了一个小代码,说明如何使用它而不必太费劲
是的,像通常那样编写命令,然后使用
split
来使用接收字符串列表的构造函数