【问题标题】:Executing a Linux command in Terminal from Java从 Java 在终端中执行 Linux 命令
【发布时间】:2015-08-16 10:41:50
【问题描述】:

我目前在 Ubuntu 的终端中使用名为“curl”的命令,请将我的 .RDF 文件上传到 Virtuoso RDF 商店。

curl -T FILE URL -u USER:PASSWORD

我想自动化这些过程,所以我在 eclipse 中创建了一个 Java 函数。此代码无效。

String[] command = {"curl -T", FILENAME, URL, "-u", credentials.USERNAME+":"+credentials.PASSWORD};
Runtime.getRuntime().exec(command)

我也试过这个。 xterm 出现,但显示此错误(即使文件位于函数的路径中):

*"/usr/bin/xterm. Can't execvp "curl" no such a directory or file"*


Runtime.getRuntime().exec("/usr/bin/xterm -e \"curl -T " + FILENAME  
                                                        + " " + URL + "-u " + credentials.USERNAME
                                                        + ":" + credentials.PASSWORD + "\"");

如果能提供任何帮助,我将不胜感激。

提前致谢

【问题讨论】:

  • 你是在自己运行它吗?如果没有,env 变量可能会有所不同,如果不在 PATH 变量中,则 curl 将不可见....您可能需要调试 printenv PATH 之类的东西并检查
  • 如果您想简单地在 Eclipse 中的某些文件上执行程序,请使用“外部工具”,它位于 Debug 和 Java 工具栏图标旁边。这些启动配置应该更方便。

标签: java eclipse ubuntu terminal virtuoso


【解决方案1】:

过去,我很难尝试使用 Runtime.exec() 运行命令。无论如何,我已经转向使用ProcessBuilder,如下所示:

ProcessBuilder pbuilder = new ProcessBuilder("bash", "-c", <<your command as string>>);
        File err = new File("err.txt");
        try {
            pbuilder.redirectError(err);
            Process p = pbuilder.start();
            p.waitFor();      

        } catch (Exception e) 
        {
             //handle exceptions if any.
        }

stderr 行是可选的,用于调试目的。我确信它可以直接打印到控制台,但还没有检查过。一旦我发现更多,我会更新我的答案。

您可以查看文档页面here

PS:还要检查您是否拥有执行所需任务所需的权限。

【讨论】:

  • 我真的很感激@blumonkey。我对 ProcessBuilder 一无所知,但它确实解决了我的问题:无论如何,我在捕捉错误时遇到了问题。这行对我不起作用:` pbuilder.redirectError(err); ` 相反,我必须使用pbuilder.redirectErrorStream() 代码,而且我无法捕捉到错误。
  • 奇怪。也许错误被打印到 STDOUT 而不是 STDERR。尝试重定向输出。请参阅 here 以重定向到控制台。您可以为 errorStream 修改接受的答案。
【解决方案2】:

使用 Runtime.exec 通常是个坏主意,为什么不使用 Java HTTP API 来上传文件呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 2011-05-09
    • 2014-07-03
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2019-08-04
    • 2015-07-22
    相关资源
    最近更新 更多