我在使用Java运行gnuplot进程时遇到了一些麻烦。我正在创建一个gnuplot脚本文件,然后在java程序中运行它。我尝试过使用Process Builder并使用Runtime.getRuntime()。exec(“blah blah ...”)构建一个进程,并且都没有完整的工作能力。有趣的是,只要我通过gnuplot创建的图像文件没有保存到没有名称空格的目录中,使用Runtime就可以使过程几乎完美。但是,ProcessBuilder完全不起作用,并且给出了错误:“CreateProcess error = 2,系统找不到指定的文件”
我花了很长时间才弄清楚这些东西,所以任何帮助都会受到赞赏。
我使用的代码在这里:
File script = new File("Demo.plt"); //Script file that outputs to a PNG file
//This works as long as the script file doesn't output to a png with a space in it's filepath
Process aProcess = Runtime.getRuntime().exec("gnuplot " + script.toString());
Thread.currentThread().sleep(1000);
aProcess.waitFor();
//This doesn't work at all
ProcessBuilder builder = new ProcessBuilder("gnuplot " + script.toString());
builder.redirectErrorStream(true);
Process process = builder.start();
我知道无论输出行中的空格如何,如果在Java之外运行,该脚本都可以工作。我甚至尝试使用'\'(空格的转义字符),但这也不起作用。实际上,这是我使用的代码:
String graphName = "DemoGraph";
//Isolate the FilePath
String path = script.getPath();
path = path.replace(script.getName(),"");
path = path.replace(File.separator, "\\\\"); //Gets around any parsing errors in filepaths on Windows
path = path.replace(" ", "\\ "); //Should get around parsing errors with spaces in gnuplot, but it seems to be irrelevant.
scriptFileWriter.write("set output \"" + path + graphName + ".png\"\r\n");
这是java的一个问题,因为脚本是从Windows命令行和gnuplot命令行运行的,并且通过双击
来运行。答案 0 :(得分:1)
我忘了在文件名周围加上引号。这是一个STUPID错误。