【发布时间】:2014-08-07 09:22:01
【问题描述】:
我正在尝试向另一个程序 APMHAL 发送命令,该程序基本上与外部硬件通信。我需要发送一个类似“apmhalcli command1 parameter1”的命令 比它成功。但是如果我尝试像“apmhalcli command1 --parameter1 --parametr2”这样的 它说: 无法运行程序“......”错误号=2,没有这样的文件或目录
但是,如果我自己在 cli 中键入完全相同的命令,它就会起作用。 (所以,如果我的 java 程序发送它,而不是错误,如果我写它就会成功)。
到目前为止,我尝试了这些:
String p1 = "command1 ";
String p2 = "--parameter1 --parametr2";
try {
new ProcessBuilder(p1 + p2).start();
} catch(IOException e1) {
e1.printStackTrace();
}
try {
Process pb = Runtime.getRuntime().exec(p1 + p2);
} catch(IOException e1) {
e1.printStackTrace();
}
任何想法,如何将命令插入 cli 并模拟“输入”?我已经尝试了几天才能让它工作...谢谢您的时间。
编辑:这是我在您的帮助下实现并尝试过的。
ProcessBuilder pb = new ProcessBuilder("apmhalcli", "openGate", "--module " + col, " --locker " + row);
pb.redirectErrorStream(true);
pb.redirectOutput(new File("out1.txt"));
try
{
pb.start();
}
catch(IOException e1)
{
e1.printStackTrace();
}
pb = new ProcessBuilder("apmhalcli openGate", "--module " + col, " --locker " + row);
pb.redirectErrorStream(true);
pb.redirectOutput(new File("out2.txt"));
try
{
pb.start();
}
catch(IOException e1)
{
e1.printStackTrace();
}
pb = new ProcessBuilder("apmhalcli", "openGate", "--module " + col + " --locker " + row);
pb.redirectErrorStream(true);
pb.redirectOutput(new File("out3.txt"));
try
{
pb.start();
}
catch(IOException e1)
{
e1.printStackTrace();
}
pb = new ProcessBuilder("apmhalcli openGate", "--module " + col + " --locker " + row);
pb.redirectErrorStream(true);
pb.redirectOutput(new File("out4.txt"));
try
{
pb.start();
}
catch(IOException e1)
{
e1.printStackTrace();
}
pb = new ProcessBuilder("apmhalcli openGate --module " + col + " --locker " + row);
pb.redirectErrorStream(true);
pb.redirectOutput(new File("out5.txt"));
try
{
pb.start();
}
catch(IOException e1)
{
e1.printStackTrace();
}
number out1 和 out3 记录只使用了“apmhalcli openGate”,后面的部分被忽略了。如前所见,其他变体刚刚失败,错误类型=2
【问题讨论】:
-
是否有意根据它是哪个 ProcessBuilder 以不同的方式对命令进行标记?
-
是的。我想获得一些见解,也许找到一种方法。但只有第 1 条和第 3 条被识别为有效命令。并且这些论点被忽略了......所以它只是给出了一种“帮助”响应。
-
试试
new ProcessBuilder("apmhalcli", "openGate", "--module", "" + col, "--locker", "" + row); -
@Zhuinden 它有效!您可以将其作为答案发送,以便我可以将此主题标记为已回答吗?
标签: java command-line-interface