【问题标题】:kdb q - license not found despite $QHOME setkdb q - 尽管设置了 $QHOME,但未找到许可证
【发布时间】:2018-02-06 14:29:25
【问题描述】:

.bashrc.profile 中,我将QHOME 变量设置为包含k4.licl64q.k(由echo $QHOME 验证)的目录。

当我从登录 shell 启动 q 一切正常时,找到了许可证文件。

当我从 java 以编程方式启动 q 进程时,我得到以下输出

[13:43:48][Step 1/2]  WARN [main] (QSession.java:78) - Q Session not alive
[13:43:48][Step 1/2]  INFO [main] (QSession.java:97) - QHOME: null
[13:43:48][Step 1/2]  INFO [main] (QSession.java:98) - QLIC: null
[13:43:48][Step 1/2] ERROR [main] (QSession.java:101) - Error output
[13:43:48][Step 1/2] '2018.02.06T13:43:46.597 k4.lic

即未找到许可证,因为 QHOME 环境变量未定义。此问题描述为here:“.bashrc 仅源自登录 shell”。建议的解决方案是

“如果您希望在所有 Bourne shell 衍生工具中设置一个变量,无论它们是否是交互式的,请将其放在 .profile 和 .bashrc 中。”

但是我已经把.bashrc的内容复制到.profile里面还是一样的错误。

不幸的是,没有办法将许可证的路径作为q 二进制文件的命令行参数传递,所以我必须使用QHOME

我可以做的是在我的 java 项目中放置一个 32 位版本,但显然使用 64 位版本是有利的。

非常感谢您的建议!

谢谢

【问题讨论】:

  • 假设您使用类似 Java exec 方法来运行 Q 进程,我认为您应该调整正在运行的命令以包含 QHOME 变量,例如exec("QHOME=/path/to/licence q") 而不是 exec(q)

标签: java bash shell kdb q-lang


【解决方案1】:

感谢@Jonathan McMurray! 确切的解决方案是使用

Runtime.getRuntime().exec(command, envp);

其中command 是例如q -p 5000envp 是例如

String[] envp = {"QHOME="+qHomePath};

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2023-03-14
    • 2019-07-25
    • 2016-07-14
    • 1970-01-01
    • 2015-01-02
    相关资源
    最近更新 更多