交互式 Lua:命令行参数

我希望通过命令行运行以下命令:

lua prog.lua arg1 arg2

在 prog.lua 文件中,我想这样说:

print (arg1, arg2, '\n')

Lua 似乎没有 argv [1] 等等,并且我见过的处理命令行参数的方法似乎都不太完善和 / 或过于繁琐。我错过了什么吗?

原文链接 https://stackoverflow.com/questions/2945819

点赞
stackoverflow用户41661
stackoverflow用户41661

你没有包含 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!)。

2010-05-31 20:29:08
stackoverflow用户282536
stackoverflow用户282536

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

%lua -i -- / dev / null一个二三
Lua 5.1.3 版权所有(C)1994-2008 Lua.org,PUC-Rio
> print(...)
一个 二 三
2010-06-03 12:56:07
stackoverflow用户670629
stackoverflow用户670629

Lua将参数存储在表中。这个表被称为“arg”表。您可以使用arg[1]、arg[2]等来访问传递的参数。

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

2012-01-24 10:09:50
stackoverflow用户3331079
stackoverflow用户3331079

如果在 freeswitch 的命令行中运行 file.lua

freeswitch> luarun prog.lua arg1

你可以使用 prog.lua

#print(argv[1])

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

#print(arg[1])
2014-02-20 04:40:53
stackoverflow用户2262111
stackoverflow用户2262111

对于问题提出者和未来的访客,

Lua 库中没有包含“将一个表 'args' 从命令行开关注入到全局变量”功能。然而,从 lua.c 构建的程序有,但是它几乎不可能使用。理由在于程序不支持多个开关。

这是我创建 REPL/代码执行器 LuaConsole 的原因之一。它会为你提供表 args,并向根 pcall 函数发送一个元组(你的执行环境实际上是带有一个错误处理程序的顶级 pcall)。所以,args[n]local a = {...}; a[n] ...; 都可以与你想要的任意数量的开关一起正常工作。例如,-e 用于从命令行执行代码,-l 用于指定库等。它支持所有 lua51 及以上的版本。

如果你在使用库中的程序时遇到问题,我强烈建议你检查一下 https://www.github.com/tilkinsc/LuaConsole,因为它将可以帮你避免与一个不太完美的程序打交道的烦恼。还有其他可供选择的替代方案,例如用于 Web 的 fengari。

希望这对你有所帮助!

2019-12-28 04:08:37