当前位置: 首页 > 面试题库 >

通过Java终端通过外部程序执行

徐智渊
2023-03-14
问题内容

我有一个外部程序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数据。

您需要通过外壳(最好使用流程构建器)启动此命令:

final ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", "otter <proof.in >proof.out");
final Process p = pb.start();

等等等

当然,您还应该确保程序从正确的目录运行-幸运的是,ProcessBuilder还允许您执行此操作。



 类似资料:
  • 问题内容: 我有一个外部程序Otter,该程序将一些文件名作为参数并创建了一个输出文件,也将其指定为参数。因此,例如,如果我的输入是“ proof.in”,并且我希望将输出放置在“ proof.out”文件中,则可以在终端中运行以下命令: “ proof.in”文件必须与水獭可执行文件位于同一文件中。 问题是我需要Java提供此功能,因此在我的Java代码中执行以下操作: 但是在此行之后,整个用户

  • 问题内容: 当前,我有一个Java Standalone Swing应用程序。 现在,当用户单击Swing应用程序中的按钮时,我想启动另一个Java应用程序(说:Calculator.jar) 我可以知道什么是便携式方法吗?这样它就可以在多个OS中工作吗? 问题答案: 使用或只是将其放在类路径中并调用其。

  • 问题内容: 可能是一个简单的问题,但我找不到有关此的任何信息。 我曾经以这种方式运行selenium2.x。我启动服务器: 然后运行测试。我使用Dart,所以我这样做 但是现在我正在尝试使用selenium3。我已经下载了它,并用新的jar替换了旧的终端调用,但看来我可以做到。Selenium告诉我它不知道这样的参数“ -Dwebdriver.chrome.driver”。在帮助中,我看不到用于指

  • 问题内容: 我一直在尝试将jar转换为exe。该程序-jar-使用蓝牙库“ Bluecove”,它是某个目录中的另一个jar。该程序还通常使用Java Swing 和东西。从Netbeans或Eclipse中运行时,该程序可以完美运行。现在是我部署它的时候了,因此我需要将其转换为exe。但是我一直无法获得最终的可执行文件来链接“ Bluecove”。我尝试了JSmooth和Launch4j,但是使

  • ,而项目本身可以完美地运行eclipse IDE。 我尝试了相同问题的解决方案,但错误仍然存在。这是一个maven项目,pom.xml具有所有依赖项。 有人能帮我解决这个问题,或者建议一种通过eclipse IDE执行java-callgraph的方法来达到同样的目的吗?

  • 有人成功地从linux终端下载了wetransfer链接吗? thnx mart