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

标签 java parameters process runtime

我正在为命令行应用程序制作前端。它有一个很长的命令行与此类似:

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/

相关文章:

java - 加载 keystore 时出错(PKCS12)

java - 如何在命令行中设置JVM字符集?

Java - 用于 Linux 的 Process.destroy() 源代码

Python 多处理 - 当最快的进程终止时返回

java - JOption 上的变量显示 2 次

java - 可以禁止 GoogleMap 在点击时移动到标记吗?

java - Servlet Jsp 和空指针

windows - 在 Windows 中休眠单个进程

java - 查找文件保存的正确参数

function - Swift 方法中的多个未命名参数