有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

处理如何使用java中的JSON执行shell命令

我无法在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) 个答案

  1. # 1 楼答案

    问题是Runtime.exec(String)使用StringTokenizer分割参数,然后调用Runtime.exec(String[])。 ^ {CD2}}不能分割该参数正确 -它不考虑单引号^ {CD5}}。最后,它调用test时会出现以下情况(每行一个参数):

    -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", ...