【问题标题】:Notepad++ sets incorrect path when running scriptNotepad++ 在运行脚本时设置了不正确的路径
【发布时间】:2013-12-24 12:12:06
【问题描述】:

我有一个简单的脚本,我想用 require 导入另一个脚本,但是当我从 Notepad++ 运行它时,我得到了 require 产生的常见错误。

有趣的是,它在一小时前就工作了,从那时起我就没有重新启动计算机。

文件在同一个目录中,所以简单的文件名(不带 .lua)有效并且应该仍然有效。 (相对路径)

Lua 可以很好地运行脚本。

这是我在记事本中输入的: cmd /k lua "$(FULL_CURRENT_PATH)"

之前我也遇到了 Penlight 的问题,可能有一些联系,所以这里是: 我试图要求“pl”,但找不到模块。 (从 SciTE 运行,以前工作过) 我在 Lua 命令行中尝试过它,它就像一个魅力。 在 SciTE 中再次尝试,瞧,它再次起作用了。

我不知道是什么原因造成的。

ps.:使用 lfs 模块和 os.execute("cd /d ...path...") 不起作用

【问题讨论】:

  • 运行 cmd /k lua "$(FULL_CURRENT_PATH)" 时遇到什么错误?
  • 我用 F5 从 NPP 运行它,我得到了这个(大致): lua: ...path... :line: module module_name not found: ...here 它列出了它的默认路径搜索...(唯一有趣的是这个:)没有文件'.module_name.lua'它在同一个目录中,所以我一无所知

标签: lua notepad++ windows-xp-sp3


【解决方案1】:

Lua 正在 LUA_PATH 的文件夹中搜索您需要的模块。在您通过 F5 运行的脚本中,输入以下语句:

print('current path is:')
os.execute('cd')
require 'someModuleThatDoesntExist'

打印“工作”文件夹(程序文件/记事本++)后,它会尝试找到所需的模块并失败。回溯显示 Lua 浏览了许多不同的文件夹,其中没有一个是包含 FULL_CURRENT_PATH 的文件夹,因此它找不到模块。

你有几个选择:

  1. 将您的脚本放在列出的路径之一中
  2. 在您的环境中设置 LUA_PATH 以包含您的脚本所在的文件夹名称
  3. 从您的脚本中更改 package.path,以便它知道在哪里寻找其他模块。您可以通过以下任一方式执行此操作:
    • 在您的 F5 中包含一个额外的参数,即 CURRENT_DIRECTORY,并让您的脚本将其第一个命令行参数 (CURRENT_DIRECTORY) 添加到 package.path
    • 在脚本启动时解析 arg[0],获取包含脚本的文件夹,并扩展 package.path

例如对于#3,第一个选项,你会使用

cmd /k lua "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)"

在记事本++和你会使用的 Lua 模块中

thisModuleDir = arg[1]
package.path = thisModuleDir .. ";" .. package.path
require 'yourmodule'

【讨论】:

  • 是的,应该可以,但是我仍然不明白为什么如果 10 次它会工作 8 次,而在剩下的 2 次失败,它并不总是改变路径,我检查了它os.execute"cd" 和 lfs.currentdir 也是如此,当我使用 lfs 时,它起作用了。我还没有重新启动 NPP,我只是添加了: print(require("lfs").currentdir()) 突然它在目录 ps 中找到了所有内容。:我知道 Lua 在哪里寻找,我想要一种查找文件的方法在脚本所在的同一目录中
  • @user1896037 技术#3 是您将使用的。请参阅编辑后的答案。
猜你喜欢
  • 2021-01-18
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 2023-01-24
相关资源
最近更新 更多