java - 使用带有参数列表的 ProcessBuilder 作为单个字符串

标签 java processbuilder

我尝试从 Runtime.exec(command) 切换到 ProcessBuilder 以从 Java 程序执行 ImageMagick 的 convert。 convert 的选项是作为字符串从用户传入的,因此我无法轻松地将参数分开以将它们单独传递给 ProcessBuilder 的构造函数。在 (Unix) 命令行上运行的实际命令是

convert -colorspace gray -enhance -density 300 in.pdf out.pdf

我怎样才能让它工作:

public class Demo {
    public static void main(String[] args) throws IOException, InterruptedException {
        String convertOptions = "-colorspace gray -enhance -density 300"; // arguments passed in at runtime
        ProcessBuilder bp = new ProcessBuilder(new String []{"convert",convertOptions,"in.pdf","out.pdf"});
        Process process = bp.start();
        process.waitFor();
    }
}

目前,代码刚刚运行

最佳答案

老问题,但因为我面临着类似的情况...

如果您不想将命令字符串拆分为一个数组,您可以使用 bash -c 执行整个字符串:

String convert= "convert -colorspace gray -enhance -density 300";
String[] cmd= new String[] {"bash", "-c", convert};
ProcessBuilder builder = new ProcessBuilder(cmd);
...

这当然假设 bash 可用。

关于java - 使用带有参数列表的 ProcessBuilder 作为单个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35242294/

相关文章:

java - 在 C# 中运行 JAR 文件而不提供 PROCESS 的路径

java - 如何使用 Log4j2 在关闭 Hook 中登录?

java - 将标准输出字节从 Process 转发到 WebSocket 或读取当前 InputStream 长度

java - 如何在不同的gradle任务之间共享参数

java - 为什么我的 Java 序列化在单次转换和多次转换方面表现不佳?

java - URL 自动检测并在文本 block 中突出显示

java - 使用进程.exec

Java - 使用ProcessBuilder目录()时系统找不到指定的文件

java - ProcessBuilder 不使用通配符执行命令

使用 ProcessBuilder 时 Java 不启动 GZIP 命令