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

标签 java terminal process processbuilder

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

python3 script.py arg1 arg2 > out.png

这里的问题是 processbuilder 不允许我在参数中添加“>”(重定向输出)字符,后跟 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"));

最佳答案

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

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

关于用于创建图像文件的 Java ProcessBuilder 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49362066/

相关文章:

Java:当值是数组列表时,按值对映射进行排序

java - 哪个硬件因素对快速代码编译很重要

python - 如何使用 python file.py 从命令行运行类?

cocoa - 如何使用终端安装 Mac 应用程序

linux - 一个子进程可以处理多少个连接?

android - 在同一进程中运行的两个应用程序是否可以具有不同的 STATIC 对象值?

java - 通过根据您所在的环境传递必需的参数来实例化类

java - 在mongodb中使用AND查询嵌入对象

cocoa - 用 cocoa 控制另一个应用程序

java - 在java中,排序时,当我有相同的值时,特定问题的解决方案是什么