小编典典

带有长参数的java runtime.getRuntime.exec(cmd)

java

我正在为命令行应用程序做前端。它很长。命令行与此类似:

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

所以我无法解析。


阅读 494

收藏
2020-11-30

共1个答案

小编典典

+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);
}

我知道您已经说过,您尝试将参数作为字符串数组发送通过,但是没有成功,但是您是否收到了其他类型的错误?如果其他程序有日志,则可能要查看出了什么问题。您可以编写一个简单的脚本,输出用于调用的参数以测试实际通过的参数。

2020-11-30