我有一个外部程序Otter,该程序将一些文件名作为参数并创建了一个输出文件,也将其指定为参数。因此,例如,如果我的输入是“ proof.in”,并且我希望将输出放置在“ proof.out”文件中,则可以在终端中运行以下命令:
otter <proof.in >proof.out
“ proof.in”文件必须与水獭可执行文件位于同一文件中。
问题是我需要Java提供此功能,因此在我的Java代码中执行以下操作:
java.lang.Runtime.getRuntime().exec("otter <proof.in >proof.out")
但是在此行之后,整个用户界面被冻结,并且什么也没有发生,并且没有生成输出文件。
谁能告诉我我错了哪里?
在此先感谢Tamash
这是正常现象:您正在尝试启动通常由Shell发出的命令。
在这里,<proof.in和>proof.out作为otter可执行文件的文字参数,而不是shell重定向。但是查看该工具的主页将无法正常工作:它需要标准输入(通常由重定向提供)上的stdin数据。
<proof.in
>proof.out
otter
您需要通过外壳(最好使用流程构建器)启动此命令:
final ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", "otter <proof.in >proof.out"); final Process p = pb.start();
等等等
当然,您还应该确保程序从正确的目录运行-幸运的是,ProcessBuilder还允许您执行此操作。
ProcessBuilder