【问题标题】:Lua cmd-line stringLua 命令行字符串
【发布时间】:2015-11-29 12:53:17
【问题描述】:

假设我用这个 cmd 调用 Lua:

luajit neuralnetwork.lua --satEpoch "somestring" --maxEpoch 50

如何从 Lua 访问相同的命令行字符串?

我知道arg 表,但它会从原始命令字符串中删除所有引号,使其难以重构:

{
   "--maxEpoch"
   "--satEpoch"
   "50"
   "somestring"
   [-1] : "luajit"
   [0] : "examples/neuralnetwork.lua"
}

如果我可以将确切的字符串从 Lua 中保存到一个文件中,我以后可以轻松地再次调用它。

【问题讨论】:

    标签: lua torch cmdline-args


    【解决方案1】:

    @peterpi 是正确的,shell 正在解释命令并因此剥离了引号。但是,为了让 shell 以与以前相同的方式解释命令,实际上并不需要准确地重构命令。

    对于简单的情况,将参数连接到脚本通常就足够了:

    local command = table.concat(arg, ' ', -1, #arg)
    

    如果确实需要引号,这将失败,最常见的是当参数包含空格或 shell 字符时,因此引用所有内容很容易并且更健壮,但并不美观。

    这是一个使用 Lua 模式的示例,用于检查特殊 (bash) shell 字符和空格,以确定是否需要以及哪些引号是必要的。它可能不完整,但它处理文件名、大多数字符串和数字作为参数。

    local mod_arg = { }
    for k, v in pairs(arg) do
        if v:find"'" then
          mod_arg[k] = '"'..v..'"'
        elseif v:find'[%s$`><|#]' then
          mod_arg[k] = "'"..v.."'"         
        else
          mod_arg[k] = v
        end
    end 
    local command = table.concat(mod_arg, ' ', -1, #mod_arg)
    print(command)
    

    【讨论】:

      【解决方案2】:

      毫无疑问,有人会证明我错了,但总的来说,我认为这是不可能的。是 shell 而不是 luajit 将引号去掉并将行分割成单独的标记。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 2014-11-09
        • 2010-11-23
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        • 2021-02-20
        相关资源
        最近更新 更多