Java中运行外部进程的跨平台方法?

5
我需要从Java中调用外部程序,例如ImageMagick的convert。在Windows上,除非我在实际命令之前加上cmd /c,否则它将无法运行。
String source = "test.jpg";
String result = "test-thumbnail.jpg"; 
ProcessBuilder builder = new ProcessBuilder().command("cmd", "/c", "convert", source, "-thumbnail", "295x", result);
Process process = builder.start();

如何避免使用cmd /c使我的代码能够在非Windows操作系统上运行?
不使用cmd /c会遇到类似于这里描述的问题:从Python运行ImageMagick convert(控制台应用程序) - 即存在本地的Windows convert.exe被调用,而不是ImageMagick的convert.exe。似乎子进程的环境没有选择PATH
我已经仔细检查了我的系统PATH,确保ImageMagick目录位于C:\Windows\system32之前。当我在Windows命令行中输入该命令时,它可以完美运行。

仅用于调试目的,请尝试转到C:\ Windows \ System32并将convert.exe重命名为msconvert.exe - Mark Setchell
1个回答

3
你可以检查操作系统。
private static String OS = System.getProperty("os.name")

是的,这样做可以起作用,但我想了解为什么首先需要使用 cmd /c - stys
我不确定,但我认为在Linux中命令是操作系统的主要程序,而在Windows中,命令提示符只是一个普通程序。 - Eduardo Pérez
1
"cmd" 是启动过程(基本上它会打开一个新的控制台窗口),"/c" 告诉命令行在进程运行后不要保持活动状态(所以它会自动关闭)。 - Drusantia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接