【问题标题】:Runtime.getRuntime().exec(command) doesn't do anythingRuntime.getRuntime().exec(command) 不做任何事情
【发布时间】:2019-12-15 16:05:06
【问题描述】:

在我的 XPages 应用程序中,我必须调用 curl 命令

代码很简单:

public static InputStream executeCurlCommand(String finalCurlCommand) throws IOException
{
    return Runtime.getRuntime().exec(finalCurlCommand).getInputStream();
}

但是,该命令似乎根本没有执行。

当我执行以下命令时(在 Linux 终端中):

curl -k -i -X GET https://someHost/fws/api/esia/login?redirectUrl=https://redirectHost/sed/gecho/2019/gecho_apps_2019.nsf/Nav2.xsp

我得到了输出。

但每当我用 Java 执行它时,它都不起作用。 getInputStream() 为空。

同时,如果我在本地 Windows 机器上执行此代码,一切都很好。从 cmd 执行的命令也是如此。

但是在 XPages 中没有异常,没有错误,什么都没有。

有没有办法调试它?

UPD

如果我将命令更改为像 ls -la 这样简单的命令,一切正常:x

【问题讨论】:

  • curl 是否在运行 Domino 任务的用户路径上?
  • 不,它从文件夹 notesdata0 运行。 curl 命令随处可见
  • 或者我可能没听懂你的意思...你能具体说明你的问题吗?
  • Domino 用户?当您启动交互式会话时,会执行 .bashrc。不是在您将 Domino 作为服务启动时。所以你需要仔细检查你的路径。尝试 env 命令查看真实路径
  • 并且不要使用 shell curl。 Apache http 客户端是 Domino 的一部分。使用那个

标签: java debugging xpages lotus-domino runtime.exec


【解决方案1】:

好的,伙计们,我想通了。问题是我将完整的命令传递给了 shell。它在 UNUX 中不起作用。

所以

你不应该使用

public static InputStream executeCurlCommand(String finalCurlCommand) throws IOException
{
    return Runtime.getRuntime().exec(finalCurlCommand).getInputStream();
}

在 UNIX 系统中。请改用ProcessBuilder

例如:

ProcessBuilder pb = new ProcessBuilder(
"curl",
"-k",
"-i",
"-X",
"GET",
"http://host.com");
pb.redirectErrorStream(true);
Process p = pb.start();
InputStream is = p.getInputStream();

【讨论】:

  • 很高兴你知道了。你会添加你使用的代码。这是一个普遍的 Java 问题,其他人将从您的见解中受益
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多