2010-03-17 7 views
7

Ich arbeite an einer Anwendung ein Problem mit dem Ausführen von Shell-Befehl von Java-Anwendung. hier ist der Code:Shell-Befehl von Java ausführen

public String execRuntime(String cmd) { 

     Process proc = null; 
     int inBuffer, errBuffer; 
     int result = 0; 
     StringBuffer outputReport = new StringBuffer(); 
     StringBuffer errorBuffer = new StringBuffer(); 

     try { 
      proc = Runtime.getRuntime().exec(cmd); 
     } catch (IOException e) { 
      return ""; 
     } 
     try { 
      response.status = 1; 
      result = proc.waitFor(); 
     } catch (InterruptedException e) { 
      return ""; 
     } 
     if (proc != null && null != proc.getInputStream()) { 
      InputStream is = proc.getInputStream(); 
      InputStream es = proc.getErrorStream(); 
      OutputStream os = proc.getOutputStream(); 

      try { 
       while ((inBuffer = is.read()) != -1) { 
        outputReport.append((char) inBuffer); 
       } 

       while ((errBuffer = es.read()) != -1) { 
        errorBuffer.append((char) errBuffer); 
       } 

      } catch (IOException e) { 
       return ""; 
      } 
      try { 
       is.close(); 
       is = null; 
       es.close(); 
       es = null; 
       os.close(); 
       os = null; 
      } catch (IOException e) { 
       return ""; 
      } 

      proc.destroy(); 
      proc = null; 
     } 


     if (errorBuffer.length() > 0) { 
      logger 
        .error("could not finish execution because of error(s)."); 
      logger.error("*** Error : " + errorBuffer.toString()); 
      return ""; 
     } 


     return outputReport.toString(); 
    } 

aber wenn ich versuche Befehl exec wie:

/export/home/test/myapp -T "some argument" 

myapp "some argument" als zwei getrennte liest arguments.but ich "some argument" als nur ein Argument lesen möchten. Wenn ich diesen Befehl direkt vom Terminal ausführen, wurde es erfolgreich ausgeführt. Ich versuchte '"some argument"', ""some argument"", "some\ argument", aber funktionierte nicht für mich. Wie kann ich dieses Argument als ein Argument lesen?

Antwort

16

Ich erinnere mich, dass die Überlastung der Exec-Methode einen Parameter für die Argumente separat bereitstellt. Sie müssen das verwenden

Yup. Hier ist es

public Process exec(String[] cmdarray) 
      throws IOException 

Nur die Kommandozeile machen und alle Argumente Seperate Elemente der String Array

+0

thx @midhat. Das funktioniert für mich. – Aykut

+0

[Wenn 'Runtime.exec()' nicht: Navigieren Sie sich um Fallstricke im Zusammenhang mit der 'Runtime.exec() 'Methode] (http://www.javaworld.com/article/2071275/core-java/when -runtime-exec --- won-t.html) oder möglicherweise eine zukunftssichere [Suchmaschinen-Abfrage] (https://duckduckgo.com/?q=When+Runtime.exec+wont+Navigate+around+around+ Fallstricke + bezogen auf + die + Runtime.exec + Methode). –

-3

zuerst eine Zeichenfolge
String cmd machen = "/ export/home/test/myapp -T \" irgendein Argument \ "";
dann run cmd in proc

+2

Das macht absolut nichts anderes als das, worauf Aykut bereits hingewiesen hat. –

+0

@MiladNaseri Abgesehen davon, dass es korrekt den Zitaten entgeht, die Aykuts tatsächlicher Fehler war. – Silveri