我正在为命令行应用程序制作前端。它有一个很长的命令行与此类似:
public String liveShellCommand(){
String cmd="command mode --parameter arg --parameter2 arg2 --parameter3 arg3";
Runtime run = Runtime.getRuntime() ;
Process pr ;
try {
log.progress("sending command: " +cmd);
pr = run.exec( cmd );
pr.waitFor() ;
一切似乎都正常,直到我添加“模式”开关。 “模式”开关从命令行执行。我尝试了一些组合,将参数拆分到一个数组中,但这些组合也不执行。我认为这与“模式”前面没有 -- 有关,而且它前面不能有 -- 。
我做错了什么?
编辑:我忘了提及,我所能看到的只是:调试器因无法编译的源代码而停止。我正在使用 netbeans,它似乎没有打印出堆栈跟踪。它停止在 run.exec(cmd) 上。 java有什么问题吗?
我能够使用 ProcessBuilder 来运行它,而不会只是简单地失败......
它可以很好地解析“命令”,但是当我添加“命令模式”时
java.io.IOException: Cannot run program "command mode": java.io.IOException: error=2, No such file or directory
所以我猜它无法解析。
最佳答案
+1 用于将参数作为数组发送。
将所有内容作为字符串发送可能在某些系统上有效,但在其他系统上失败。
Process start = Runtime.getRuntime().exec(new String[]
{ "java", "-version" });
BufferedReader r = new BufferedReader(
new InputStreamReader(start.getErrorStream()));
String line = null;
while ((line = r.readLine()) != null)
{
System.out.println(line);
}
我知道您说过您尝试将参数作为字符串数组发送,但没有成功,但是您是否收到了不同类型的错误?如果其他程序有日志,您可能想看看出了什么问题。您可以编写一个简单的脚本来输出调用它的参数,以测试实际发生的情况。
关于java runtime.getRuntime.exec( cmd ) 带有长参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434009/