2016-06-19 19 views
0

私は、データをinfluxdbサーバに送信するために書いたjavaプログラムを使用して、コマンドライン - curlコマンドを実行する際に問題があります。Javaプログラムでコマンドライン引数を実行する際の問題

これが私のプログラムにコマンドを送信するためのコードです:

public static void main (String[] args){ 
    String command = "curl -i -XPOST 'http://localhost:8086/write?db=speed' --data-binary 'test,dataset=perf cpu=10'"; 
    execcommand (command); 
} 

public static void execcommand (String command){ 
    StringBuffer output = new StringBuffer(); 
    Process p; 
    try { 
     p = Runtime.getRuntime().exec(command); 
     p.waitFor(); 
     BufferedReader reader = 
      new BufferedReader(new InputStreamReader(p.getInputStream())); 

     String line = ""; 
     while ((line = reader.readLine())!= null) { 
      output.append(line + "\n"); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    System.out.println(output.toString().length()); 
} 

問題は、データがサーバーに送信されていないことで、コマンドからの応答がゼロです。

コマンドラインから全く同じコマンドを実行できるので、コマンドの構文に間違いはありません。私はその情報が役に立つなら、マッキントッシュを使っています。

My-MBP:~ MB$ curl -i -XPOST 'http://localhost:8086/write?db=speed' --data-binary 'test,dataset=perf cpu=10' 
HTTP/1.1 204 No Content 
Request-Id: 3f866002-3640-11e6-8988-000000000000 
X-Influxdb-Version: 0.13.0 
Date: Sun, 19 Jun 2016 17:07:05 GMT 

My-MBP:~ MB$ 

コマンドライン引数を実行するコードは正しいですか?なぜ私のjavaプログラムからコマンドが実行されていないのですが、端末から正常に動作していますか?

ありがとうございます。

答えて

1

String[]バージョンRuntime.execを使用してください。だから、

String command = "curl -i -XPOST 'http://localhost:8086/write?db=speed' --data-binary 'test,dataset=perf cpu=10'"; 

の代わりに文字列[]

String[] command = {"curl", "-i", "-XPOST", "http://localhost:8086/write?db=speed", "--data-binary", "test,dataset=perf cpu=10"}; 

を使用して引数を指定してコマンドを作成し、このことができます幹部

Runtime.getRuntime.exec(command); 

希望を呼び出します。

関連する問題