如何使用 Java 中的 JSON 执行 shell 命令



我无法在 Java 进程中执行 JSON 命令或ProcessBuilder, 这里我包含一个我执行的模型命令,

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

问题是Runtime.exec(String)使用StringTokenizer来拆分参数,然后调用Runtime.exec(String[])StringTokenizer无法正确拆分该参数 - 它不考虑单引号'。它最终调用 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", ...

最新更新