在Java程序中执行命令行参数的问题

时间:2016-06-19 17:11:36

标签: java shell curl

执行命令行时出现问题 - curl命令,使用我编写的java程序将数据发送到Influxdb服务器。

这是在我的程序中发送命令的代码:

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

问题是数据没有发送到服务器,命令的响应为零。

可以从我的命令行运行完全相同的命令,因此命令的语法没有任何问题。如果该信息有用,我正在使用macintosh。

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 个答案:

答案 0 :(得分:1)

使用String[]的{​​{1}}版本。所以代替

Runtime.exec

使用String []

创建带参数的命令
String command = "curl -i -XPOST 'http://localhost:8086/write?db=speed' --data-binary 'test,dataset=perf cpu=10'";

然后调用exec

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

希望这有帮助。