无法打开prog.lua:没有此类文件或目录

时间:2018-11-03 12:25:51

标签: windows command-line lua arguments

以下程序将文本文件从Windows格式转换为POSIX格式(这意味着它将一系列回车换行符转换为换行符)

    local inp = assert(io.open(arg[1], "rb"))
    local out = assert(io.open(arg[2], "wb"))

    local data = inp:read("a")
    data = string.gsub(data, "\r\n", "\n")
    out:write(data)

    assert(out:close())

这是我要转换的示例

    print("Hello World!")
    print("\r\n")

我们可以使用lua [options] [script [args]]格式从外壳调用脚本。因此,我输入了lua文件prog.lua,并将要转换示例的文件称为example.lua,以便将其存储在arg [1]和arg [2]中:

    >prog.lua exampe.lua example.lua

之后,我得到此错误:

    C:\Program Files\Lua\5.3\prog.lua:1: bad argument #1 to 'open' (string 
    expected, got nil)
    stack traceback:
    [C]: in function 'io.open'
    C:\Program Files\Lua\5.3\prog.lua:1: in main chunk
    [C]: in ?

我认为这是第一行中io.open(arg [1],“ rb”)中函数调用的第一个参数。但是,我不明白为什么它会出错,因为示例文件应该存储在arg [1]和arg [2]中,但是转换器仍然给出错误。 有什么解决办法可以解决这个问题吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

这是Windows功能(或错误)。

直接运行Lua时,所有参数arg1 arg2 arg3都传递到脚本(在arg表内部和vararg ...内部)

C:\> lua.exe program.lua arg1 arg2 arg3

.LUA扩展名声明为可执行文件时(如在系统中一样),则可以在命令行中省略lua.exe,但不会将参数传递给Lua脚本。

C:\> program.lua arg1 arg2 arg3

这就是为什么您的arg[1]nil的原因。 您必须以lua.exe开始命令行,才能将参数传递给脚本。