【问题标题】:Cross-platform way to run external process from java?从java运行外部进程的跨平台方式?
【发布时间】:2015-06-03 22:05:25
【问题描述】:

我需要从 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,我会遇到与此处描述的非常相似的问题:running imagemagick convert (console application) from python - 存在一个正在调用的本机 Windows convert.exe,而不是 ImageMagick 的 convert.exe。似乎PATH 没有被子进程的环境选中。

我已经仔细检查了我的系统PATHC:\Windows\system32 之前有 ImageMagick 目录。当我在 Windows 命令行中键入命令时,该命令本身也运行良好。

【问题讨论】:

  • 仅出于调试目的,尝试转到 C:\Windows\System32 并将 convert.exe 重命名为 msconvert.exe

标签: java windows exec


【解决方案1】:

您可以检查操作系统。

private static String OS = System.getProperty("os.name")

【讨论】:

  • 是的,好吧,这会起作用,但我想了解为什么首先需要cmd /c
  • 我不确定,但我认为虽然 un linux 命令是操作系统的主程序,但在 windows 上,cmd 只是一个程序。
  • cmd 是要启动的进程(基本上它会打开一个新的控制台窗口),/c 告诉在进程运行后不​​要让控制台保持活动状态(因此它会自行冷却)。
猜你喜欢
  • 1970-01-01
  • 2019-04-26
  • 2016-09-08
  • 1970-01-01
  • 2011-02-21
  • 2011-09-25
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
相关资源
最近更新 更多