【问题标题】:interactive lua: command line arguments交互式 lua:命令行参数
【发布时间】:2011-02-26 02:41:25
【问题描述】:

我想做

 lua prog.lua arg1 arg2

从命令行

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

print (arg1, arg2, '\n')

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

【问题讨论】:

  • 我很好奇你对这样的straightforward problem 看到了什么“不成熟/繁琐”的解决方案。
  • lua-users.org/wiki/CommandLineModule 与内置的 argc、argv 相比似乎很麻烦; getopt(在我的机器上的 C:/Program Files/Lua/5.1/docs/stdlib/getopt.html 上)上面写满了 TODO,广告中的示例是空白的。感谢您指向 arg 手册。谷歌并没有为我做它为你做的事,我一直在到处寻找这个。这是关于成为 n00b 的事情之一(再次) - 最简单的事情似乎不起作用:-(

标签: command-line lua interactive


【解决方案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 manual section on Lua standalone 中的更多信息(感谢 Miles!)。

【讨论】:

  • 你完全正确,我是!手册上的那个在哪里?我没有很好地绕过它 ATM。干杯
  • 感谢您的回答!我在 lua 5.2.4 上尝试了lua -i -- one two three 并得到了cannot open one: No such file or directory。这让我觉得/dev/null 是必需的(根据手册中的[script [args]],而不是[script] [args])---我理解正确吗?如果你不反对,我会更新答案来解释。非常感谢!
  • @cxw re: /dev/null is required 你可以把任何 lua 脚本路径放在那里。 /dev/null 只是表示在进入交互模式之前没有要运行的脚本。
【解决方案2】:

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

% lua -i -- /dev/null 一二三 Lua 5.1.3 版权所有 (C) 1994-2008 Lua.org, PUC-Rio > 打印(...) 一二三

【讨论】:

    【解决方案3】:

    Lua 将参数存储在一个表中。该表是“arg”表。您可以使用 arg[1], arg[2], ... 访问内部传递的参数。

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

    【讨论】:

    • 如何定义自己的表名而不是“arg”?
    【解决方案4】:

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

    freeswitch> luarun prog.lua arg1
    

    你可以使用 prog.lua:

    #print(argv[1])
    

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

    #print(arg[1])
    

    【讨论】:

      【解决方案5】:

      对于 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 从命令行执行代码,-l 指定库等。它支持任何 lua51 及更高版本。

      如果您在使用库中的程序时遇到问题,我强烈建议您查看https://www.github.com/tilkinsc/LuaConsole,因为它可以让您免去处理感觉很糟糕的程序的头痛。还有其他替代方案,例如 web、fengari。

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 2012-07-12
        • 2010-09-27
        相关资源
        最近更新 更多