【问题标题】:Run script instructions from external source in Lua在 Lua 中从外部源运行脚本指令
【发布时间】:2013-02-04 12:23:13
【问题描述】:

好的,我想知道是否有一种方法可以使用 Lua 从外部源运行脚本。无论是 .txt 格式的另一个文件还是来自 pastebin 的文件,你有什么,运行代码并等待所述代码完成,然后继续执行其余的功能。我不太确定它是如何工作的,但这基本上是我的想法,并不是实际的代码。

function runStuff()
print("checking for stuff")
run.script(derp.txt)
wait for script
   if run.script == finished
   continue program
      elseif nil
   print("looks like this script sucks.")
   end
end
runStuff()

例如“derp.txt”包含的是:

function lookFile()
   if herp.txt exists then
      rename herp.txt to herp.lua
   else
      nil
   end
end
lookFile()

我还是 Lua 的新手,所以我在这里像个白痴一样编码,但希望你能得到我的照片。我正在开发一个项目,该项目的作用类似于基于 pastebin 或其他任何提供 lua 脚本原始格式输出的存储库的安装程序包,我将使用这个想法来调用脚本运行外部。因此,当我提供程序的“首次运行”版本时,它会调用一个 lua 脚本,该脚本会调用另一个 lua 脚本并安装该脚本,然后关闭。

这是我的世界,请注意。 ComputerCraft 让我对 Lua 产生了兴趣,但无论如何,希望你能明白我想要弄清楚的要点。希望这是可行的,如果不可行,我只需要找出其他办法。

【问题讨论】:

  • 看看loadfiledofile。在发布到 SO 之前,请尝试至少浏览一下文档。
  • 那么 loadfile 是否可以通过 pastebin 原始链接工作?我在这里要做的是从外部源运行脚本,而不是特别加载文件,而是打开所述文档并读取里面的脚本并运行该脚本。因此,例如运行 pastebin 上的脚本,而不是仅仅抓取脚本并将其保存为文件并在您的机器上运行,加载脚本所在的链接并运行给出的说明。
  • 请在您开始提出更多毫无意义的问题之前,RTFM。你必须提供一个包含 lua 代码的文件,这里有什么难理解的?如果你想直接从 pastebin 中获取代码,你需要luasocket 和一个 http 查询文件内容。
  • luasocket,我会调查的。谢谢,如果我激怒了你什么的,对不起。我正在使用的东西确实有一个 http.request 函数,所以它至少有这个能力。我可以拉出指令并将其输出到窗口中,如果我愿意,可以查看它,只是接受这些指令而不是查看它们,只是从那里运行它们是我想要实现的,我会更多地研究看看这里是否还有我遗漏的功能。
  • 因此,如果您加载了内容,您可以将字符串版本转换为可通过load 函数调用的内容。如f = load([[ print "foo" ]]); f();

标签: lua minecraft computercraft


【解决方案1】:

要加载和执行 Lua 代码片段,您可以使用以下代码:

local http = require("socket.http")
local response, err = http.request("url to some Lua code")
if not response then error(err) end
local f, err = (loadstring or load)(response)
if not f then error(err) end
print("done with "..response)
-- make sure you read on (in)security implications of running remote code
-- f() -- call the function based on the remote code

您可能需要使用sandboxing

【讨论】:

  • 在几个朋友的帮助下,我做了一些似乎可行的事情:pastebin.com/raw.php?i=tzGm3aLn 它似乎成功了,现在我只是想弄清楚如何从外部程序。
猜你喜欢
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2018-08-14
  • 2021-06-21
  • 1970-01-01
  • 2014-05-14
相关资源
最近更新 更多