Java ProcessBuilder输出创建图像文件

时间:2018-03-19 11:38:33

标签: java terminal process processbuilder

我目前正在java中使用ProcessBuilder来运行python脚本,就像我在终端中执行它一样。这个python脚本应该创建一个图像,在终端我会这样做

python3 script.py arg1 arg2 > out.png

问题在于,processbuilder不允许我添加'>' (重定向输出)char在参数后跟我的out.png文件的路径。

它目前创建一个带有奇怪字符的输出(我假设它是一个base64字符串)。

我目前的一些代码:

File output = new File("/Users/myuser/Desktop/OUTXXXXXXXXX.png");
ProcessBuilder pb =
    new ProcessBuilder("/usr/local/bin/python3", pythonScriptLocation",
        fileOneLocation, fileTwoLocation);
pb.redirectInput(output);
Process process = pb.inheritIO().start();
int errCode = process.waitFor();
System.out.println("Command executed, any errors? " + (errCode == 0 ? "No" : "Yes"));

声明上面使用的所有变量。

已经看过这种方法但它根本没有创建任何文件。

编辑:

使用redirectOutput方法:

File output = new File("/Users/myuser/Desktop/OUTXXXXXXXXX.png");
ProcessBuilder pb =
    new ProcessBuilder("/usr/local/bin/python3", pythonScriptLocation",
        fileOneLocation, fileTwoLocation);

File stdoutFile = new File("/Users/mysuer/Desktop/outxx.png");
pb.redirectOutput(stdoutFile);
Process process = pb.inheritIO().start();
int errCode = process.waitFor();
System.out.println("Command executed, any errors? " + (errCode == 0 ? "No" : "Yes"));

1 个答案:

答案 0 :(得分:1)

您应该停止Java进程从Python进程继承IO(停止调用pb.inheritIO())。完成后,您可以将流程的输出重定向为:

File stdoutFile = new File("out.png");
redirectOutput(output);