如何从Java使用JSON执行Shell命令

时间:2019-12-09 14:03:38

标签: java process processbuilder

我无法在Java流程或ProcessBuilder中使用JSON执行命令, 在这里,我包括了要执行的模型命令,

ArrayList<String> outPut = new ArrayList<String>();
String sp = "test -n test -p '{\"test\": {\"test\": {\"test\": {\"test\": {\"test\": \"test\"}}}}}'";
Process process = Runtime.getRuntime().exec(sp);
System.out.println(sp);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));

String s = null;

while ((s = stdInput.readLine()) != null) {
    outPut.add(s);
}

System.out.println(outPut);

1 个答案:

答案 0 :(得分:3)

问题是Runtime.exec(String)使用StringTokenizer拆分参数,然后调用Runtime.exec(String[])StringTokenizer无法正确分割该参数-它不考虑单引号'。最终以类似(每行一个参数)的方式调用测试:

-n
test
-p
'{test:
{test:
{test:
{test:
{test:
test}}}}}'

已注释的解决方案:使用Runtime.exec(String[]),例如:

String[] cmd = { 
  "test", 
  "-n", 
  "test", 
  "-p", 
  "{\"test\": {\"test\": {\"test\": {\"test\": {\"test\": \"test\"}}}}}"
};
Process process = Runtime.getRuntime().exec(cmd);

我的测试程序

import java.io.*;

public class test {
    public static void main(String[] args) throws IOException {
        try (Writer wr = new FileWriter("args.txt")) {
            for (String arg : args)
                wr.write(arg + "\n");
        }
    }
}

非常简单,不用任何IDE即可完成,抱歉

我必须先调用Java,所以我的cmd更改为cmd = { "java", "test", "-n", ...

相关问题