交互式lua:命令行参数

时间:2010-05-31 20:24:17

标签: command-line lua interactive

我希望

 lua prog.lua arg1 arg2

从命令行

在prog.lua里面,我想说,例如

print (arg1, arg2, '\n')

Lua似乎没有argv [1]等,而我看到的处理命令行参数的方法似乎不成熟和/或繁琐。我错过了什么吗?

5 个答案:

答案 0 :(得分:45)

您错过了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 manual section on Lua standalone中的更多信息(感谢Miles!)。

答案 1 :(得分:25)

除了arg表之外,...还包含用于调用脚本的参数(arg [1]和up)。

% lua -i -- /dev/null one two three
Lua 5.1.3  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print(...)
one     two     three

答案 2 :(得分:5)

Lua将参数存储在表中。该表是“arg”表。您可以使用arg [1],arg [2],...

访问内部传递的参数

arg [0]是lua程序的名称。 arg [1]是传递的第一个参数,arg [2]是传递的第二个参数,依此类推......

答案 3 :(得分:2)

如果你在freeswitch的cmd中运行file.lua

freeswitch> luarun prog.lua arg1

您可以使用prog.lua:

#print(argv[1])

运行:$lua prog.lua arg1(在脚本文件夹中运行) 你可以使用prong.lua:

#print(arg[1])

答案 4 :(得分:0)

对于OP和未来的访问者,

Lua的库不包含injecting a table 'args' into globals from command line switches。由lua.c构建的程序确实可以使用。无法使用的原因是该程序不喜欢多个开关。

这是构建我的REPL /代码执行器LuaConsole的原因之一。它为您提供表args并向元pcall函数发送元组(您的执行环境实际上是顶级pcall,可能附加了错误处理程序)。因此args[n]local a = {...}; a[n] ...;都可以在任意数量的交换机上正常运行。例如,-e从cmd行执行代码,-l指定库,等等。它支持lua51及更高版本。

如果您在使用库中的程序时遇到麻烦,强烈建议您签出https://www.github.com/tilkinsc/LuaConsole,因为它可以使您免于处理感觉不佳的程序。还有其他替代方法,例如网络,fengari。

希望这对您有帮助!