首页 > 解决方案 > 无法打开 prog.lua:没有这样的文件或目录

问题描述

以下程序将文本文件从 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]] 从 shell 调用脚本。因此,我输入 prog.lua,它是 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] 中,但转换器仍然会出错。有什么解决方案可以解决这个问题吗?

提前致谢。

标签: windowscommand-lineluaarguments

解决方案


这是 Windows 功能(或错误)。

当 Lua 直接运行时,所有参数arg1 arg2 arg3都传递给脚本(在argtable 内部和 vararg 内部...

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

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

C:\> program.lua arg1 arg2 arg3

这就是你的arg[1]原因nil
您必须启动命令行lua.exe才能将参数传递给脚本。


推荐阅读