【问题标题】:cannot open prog.lua: No such file or directory无法打开 prog.lua:没有这样的文件或目录
【发布时间】:2019-04-07 10:46:27
【问题描述】:

以下程序将文本文件从 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] 中,但转换器仍然会出错。 有什么解决方案可以解决这个问题吗?

提前致谢。

【问题讨论】:

    标签: windows command-line lua arguments


    【解决方案1】:

    这是 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 开头的命令行才能将参数传递给您的脚本。

    【讨论】:

    • >lua prog.luaexampe.lua example.lua 也给了我一个错误:lua: cannot open prog.lua: No such file or directory。如果我输入 lua,它会进入交互模式,但选项仍然有效。
    • prog.lua 必须在当前目录中。否则,您应该指定程序的完整路径:lua.exe "C:\Program Files\Lua\5.3\prog.lua" arg1 arg2
    • 我是否也应该为 arg1 和 arg2 编写完整路径? prog.lua 和 example.lua(arg1 和 arg2) 与解释器在同一目录中。
    • 每次文件不在当前目录时都需要完整路径。
    猜你喜欢
    • 2023-04-06
    • 2017-05-04
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多