【发布时间】:2015-10-11 05:57:41
【问题描述】:
我正在尝试从 java 程序执行以下命令:
java -jar /opt/plasma/fr.inria.plasmalab.plasmalab-1.3.4.jar -t -a montecarlo -A"Total samples"=1000 -m models/translated/plasma/NaCl2.rml:rml --format csv -r models/translated/plasma/NaCl2.bltl:bltl
使用以下代码:
String totalSample = "-A\"Total samples\"=1000";
String mcCommand = "java -jar " + MChecker.getAppPath() + " -t "
+ "-a " + "montecarlo " + totalSample
+ " -m " + mcModelRelPath + ":rml " + "--format " + "csv "
+ "-r " + customQueryRelPath + ":bltl";
Process process = Runtime.getRuntime().exec(mcCommand);
int errCode = process.waitFor();
//then get the output, and error
但它会导致以下错误: 参数描述错误:动态参数需要 a=b 形式的值,但得到:"Total
我在终端中运行了相同的命令,它没有任何问题。但是当我在 Java 中创建命令并尝试调用该工具时它不起作用。
我认为这是因为 totalSample 参数包含空格而感到困惑。我接下来要做的是在参数(String totalSample = "-A\"Total\\ samples\"=1000";)中放入“\”空格转义,但它仍然拒绝接受。它给出了以下错误:
参数描述错误:动态参数需要 a=b 形式的值,但得到:"Total\
然后我使用 ProcessBuilder 对象运行相同的参数,如下所示:
String[] mcCommand = {"java", "-jar", MChecker.getAppPath(), "-t",
"-a", "montecarlo",totalSample, "-m",
mcModelRelPath + ":rml", "--format", "csv", "-r",
customQueryRelPath + ":bltl" };
ProcessBuilder pb = new ProcessBuilder(mcCommand);
Process process = pb.start();
process.waitFor();
但它仍然无法正常工作并引发了一些自定义异常。
我目前没有选择——你知道为什么这个命令不能在 Java 上工作,而它在终端界面上工作得很好?
顺便说一句:我在 Windows 上运行了相同的代码,它运行良好,但我必须在 Ubuntu OS 上运行此代码。
非常感谢
【问题讨论】:
-
如果您认为这是空白,您是否尝试调用 trim() 来消除它并确保这不是您的问题?
-
你能改变 jar 中的二进制文件以打印出它的参数,比如每行一个吗?或者你能写一个小罐子来做这件事并用相同的命令行调用它吗?也许这会让我们深入了解这个问题。
-
@peggy 空格字符应该在“样本总数”中,但是当它执行时,应用程序会占用 Total 部分直到空格并忽略其余部分。不知何故,我需要运行整个命令。
标签: java command-line command-line-arguments processbuilder shellexecute