【问题标题】:terminal command doesn't work in java终端命令在java中不起作用
【发布时间】:2015-03-14 02:32:41
【问题描述】:

我正在尝试在 jsp 应用程序中执行终端命令(包括 jar 文件)。 当我在终端中执行该命令时,它可以正常工作。但是当我在 java 中使用它时,我得到一个特定于我正在尝试执行的程序的错误,这意味着我可以访问该文件夹,运行它,但不知何故出现了语法错误或者我遗漏了一些东西。

Process p = Runtime.getRuntime().exec("java -jar /AbsoluteFilePath/rdfslice_1.42.jar"+
" -source /AbsoluteFilePath/test.nt"+
" -patterns \"{?s ?p ?o}\" -out /AbsoluteFilePath/output.out" +
" -order \"S\" -debug -debugGraphSize 1024");

BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
    builder.append(line);
    builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();
System.out.println(result);

我也尝试了流程构建器,但没有产生任何不同的结果。 我为流程构建器尝试的代码是:

List<String> list = Arrays.asList(
                "java",
                "-jar",
                "/AbsoluteFilePath/rdfslice_1.42.jar",
                "-source",
                "/AbsoluteFilePath/test.nt",
                "-pattern", "'{?s ?p ?o}'", "-out",
                "/AbsoluteFilePath/output.out",
                "-order", "'S'" );

        // create the process builder
        ProcessBuilder pb = new ProcessBuilder(list);


Process p = pb.start();

任何帮助将不胜感激。 问候

【问题讨论】:

  • 你能显示你得到的错误吗?
  • 对“java”使用绝对路径? - 我仍然希望看到该错误消息和有效的 shell 命令。
  • 直接从终端:java -jar /AbsolutePath/rdfslice_1.42.jar -source /AbsolutePath/rdfslice/test.nt -patterns "{?s ?p ?o}" -out /AbsolutePath/ rdfslice/eclipse.out -order "S"
  • 错误消息是特定于应用程序的cl.ly/image/2Q1y3w11380B
  • @emrahozkan 是的,这表明参数传递被破坏了。查看更新的答案。

标签: java macos terminal command


【解决方案1】:

如果要穿过外壳,间距是必不可少的。

Process p = Runtime.getRuntime().exec("java -jar /AbsoluteFilePath/rdfslice_1.42.jar"+
    " -source /AbsoluteFilePath/test.nt"+ 
    " -patterns \"{?s ?p ?o}\" -out /AbsoluteFilePath/output.out" +
    " -order \"S\" -debug -debugGraphSize 1024");

注意续行前面的空格。

这不通过 shell,所以参数必须作为单独的字符串提供。

Process p = Runtime.getRuntime().exec("java", "-jar",
         "/AbsoluteFilePath/rdfslice_1.42.jar",
         "-source",  "/AbsoluteFilePath/test.nt",
         "-patterns", "{?s ?p ?o}",
         "-out", "/AbsoluteFilePath/output.out",
         "-order", "S", "-debug2", "-debugGraphSize", "1024");

【讨论】:

  • 谢谢,但实际上是在一行中,为了便于阅读,我将其更改为这种形式。
猜你喜欢
  • 2021-06-06
  • 2018-09-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多