簡體   English   中英

帶有長參數的java runtime.getRuntime.exec(cmd)

[英]java runtime.getRuntime.exec( cmd ) with long parameters

我正在為命令行應用程序做前端。 它很長。命令行與此類似:

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

我知道您已經說過,您嘗試將參數作為字符串數組發送通過,但是沒有成功,但是您是否收到了其他類型的錯誤? 如果其他程序有日志,則可能要查看出了什么問題。 您可以編寫一個簡單的腳本,輸出用於調用的參數以測試實際通過的參數。

使用ProcessBuilder並將其傳遞給String []

     String[] cmmm = {arg3,arg4,arg5, arg6,arg7 };
     ProcessBuilder pb = new ProcessBuilder(cmmm);
     pb.directory(new File(tDir));
     Process p = pb.start();

數組就是答案。 由於命令的復雜性,我還使用了ArrayList。 無論如何...定義了arraylist,添加了命令,轉換為數組,顯示了數組,發送了命令。 每個參數都必須在數組中自己的String中。

    List<String> list = new ArrayList<>();
    list.add("command");
    list.add("param");
    String[] command = (String[]) list.toArray(new String[0]);
    log.progress (list);
    run.exec (command);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM