You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在CMD文件中调用q实例时,如何正确传递.q脚本、端口与计时器参数?

解决q启动参数顺序导致的问题

嘿,这个坑我之前也踩过!kdb+的q启动参数确实有严格的顺序规则,搞混了就会出现你说的这种部分参数失效、脚本加载异常的情况。

核心规则:q的启动选项必须放在脚本文件之前

q的命令行启动逻辑很明确:

所有带短横线的q原生选项(比如-p端口、-t计时器这些),必须全部放在要加载的.q脚本文件名前面;脚本文件名之后的所有参数,都会被当成脚本自身的输入参数,而不是q的启动选项。

分析你的两种尝试

  1. 第一种命令:q.exe code.q -p 9001 -t 10000
    这里code.q是第一个非选项参数,q会优先加载脚本,然后把后面的-p-t当成脚本的参数(而非q的启动选项),所以计时器和端口都不会生效——因为这些参数根本没被q本身处理。

  2. 第二种命令:q.exe -t 10000 code.q -p 9001
    这里-t 10000是q的选项,所以计时器生效了,但-p 9001在脚本文件名之后,被当成了脚本的参数,而非q的端口选项。至于你说脚本未被加载,大概率是脚本里的逻辑没处理这个意外的-p参数,导致你误以为脚本没运行,实际上脚本已经加载了,只是端口参数没被q正确识别。

正确的命令写法

把所有q的原生选项都放在脚本前面,像这样:

q.exe -p 9001 -t 10000 code.q

这样-p-t都会被q当作自身的启动选项处理,之后再加载code.q脚本,三个需求就都能满足了。

如果你的脚本还需要额外的输入参数,只需要把它们放在脚本文件名后面即可,比如:

q.exe -p 9001 -t 10000 code.q script_arg1 script_arg2

脚本里可以通过\argv变量获取这些参数。

内容的提问来源于stack exchange,提问作者V1ct0r 6l0r1eux

火山引擎 最新活动