用于创建图像文件的Java ProcessBuilder输出

用于创建图像文件的Java ProcessBuilder输出,java,terminal,process,processbuilder,Java,Terminal,Process,Processbuilder,我目前正在使用java中的ProcessBuilder来运行python脚本,就像在终端中一样。这个python脚本应该创建一个图像,在终端中,我会这样做 python3 script.py arg1 arg2 > out.png 这里的问题是processbuilder不允许我在参数中添加“>”(重定向输出)字符,后跟指向my out.png文件的路径 它当前创建了一个带有奇怪字符的输出(我假设它是base64字符串) 我目前的一些代码: File output = new File(

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

python3 script.py arg1 arg2 > out.png
这里的问题是processbuilder不允许我在参数中添加“>”(重定向输出)字符,后跟指向my 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"));
上面使用的所有变量都已声明

已经看到了这种方法,但它根本没有创建任何文件

编辑:

使用重定向输出方法:

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

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

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

刚刚尝试过它,它正在创建文件,但将其保留为空。无论如何,谢谢您的帮助。您是否尝试过读取process outputStream并重定向输出?是的,尝试过,也尝试过,但它甚至没有为我创建文件。请注意,您必须重定向输出,而不是输入(如上面的主代码所示)。我正要告诉您。很高兴你找到了。