windows - 无法打开 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] 中,但转换器仍然会出错。有什么解决方案可以解决这个问题吗?
提前致谢。
解决方案
这是 Windows 功能(或错误)。
当 Lua 直接运行时,所有参数arg1 arg2 arg3
都传递给脚本(在arg
table 内部和 vararg 内部...
)
C:\> lua.exe program.lua arg1 arg2 arg3
当.LUA
扩展被声明为可执行文件(如在您的系统中)时,您可以在命令行中省略lua.exe
,但参数不会传递给 Lua 脚本。
C:\> program.lua arg1 arg2 arg3
这就是你的arg[1]
原因nil
。
您必须启动命令行lua.exe
才能将参数传递给脚本。
推荐阅读
- c# - 如何使用新的 DI 将 ILogger 注入使用 IWebJobsStartup 的 Azure 函数?
- r - 如何计算 r 中分组数据框中每列的观察数
- reactjs - 用 setState 改变状态
- c++ - QTableView 显示布尔值
- ruby-on-rails - 如何防止不适当的内容通过 Rails 上传到 AWS?
- wordpress - 用户无法登录 WordPress 管理仪表板
- sql - 试图将 XML 文件放入 SQL Server 表中
- python - 如何在 Python 中后台运行 MQTT 客户端?
- python - 芹菜:更新任务名称以匹配注册任务
- laravel - 如何在 vuejs 中禁用按钮