我无法在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);
答案 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", ...