我想做
lua prog.lua arg1 arg2
从命令行
在 prog.lua 里面,我想说,例如
print (arg1, arg2, '\n')
Lua 似乎没有 argv[1] 等,我见过的处理命令行参数的方法似乎不成熟和/或繁琐。我错过了什么吗?
我想做
lua prog.lua arg1 arg2
从命令行
在 prog.lua 里面,我想说,例如
print (arg1, arg2, '\n')
Lua 似乎没有 argv[1] 等,我见过的处理命令行参数的方法似乎不成熟和/或繁琐。我错过了什么吗?
您缺少arg
向量,其中包含您想要的元素arg[1]
,arg[2]
等等:
% lua -i -- /dev/null one two three
Lua 5.1.3 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print(arg[2])
two
>
有关Lua 独立的 Lua 手册部分的更多信息(感谢 Miles!)。
除了arg
表之外,...
还包含用于调用脚本的参数(arg[1] 及以上)。
% lua -i -- /dev/null 一二三 Lua 5.1.3 版权所有 (C) 1994-2008 Lua.org, PUC-Rio > 打印(...) 一二三
Lua 将参数存储在一个表中。该表是“arg”表。您可以使用 arg[1], arg[2], ... 访问内部传递的参数
arg[0] 是 lua 程序的名称。arg[1] 是传递的第一个参数,arg[2] 是传递的第二个参数,依此类推...
如果你在 freeswitch 的 cmd 中运行 file.lua
freeswitch> luarun prog.lua arg1
您可以使用 prog.lua:
#print(argv[1])
并运行:($lua prog.lua arg1
在脚本文件夹中运行)您可以使用 prong.lua:
#print(arg[1])
对于 OP 和未来的访客,
Lua 的库不包含injecting a table 'args' into globals from command line switches
. 但是,构建的程序lua.c
确实几乎不可能使用。无法使用的原因是程序不喜欢多个开关。
LuaConsole
这是我的 REPL/代码执行器被构建的原因之一。它为您提供表args
以及向根 pcall 函数发送一个元组(您的执行环境实际上是一个顶级 pcall,可能附加了一个错误处理程序)。因此,无论您想要多少开关,两者都可以正常工作args[n]
。local a = {...}; a[n] ...;
例如,-e 从 cmd 行执行代码,-l 指定库等。它支持任何 lua51 及更高版本。
如果您在使用库中的程序时遇到问题,我强烈建议您查看https://www.github.com/tilkinsc/LuaConsole,因为它可以让您免去处理感觉很糟糕的程序的麻烦。还有其他替代方案,例如 web、fengari。
希望这对你有帮助!