【发布时间】:2012-10-27 13:06:12
【问题描述】:
我在使用 Lua os.execute() 命令时遇到问题。
我只想回显一个单词并将其写入文件,例如 echo 'aword' > C:\folder\tempworkspace\foo 以尝试 os.execute() 命令。目录 C:\folder\tempworkspace 存在,“foo”是我希望命令创建并填充“aword”的文件的名称。
稍后,当这工作时,我想使用R -q -e "rbinom(1000,1,0.7)" > C:\folder\tempworkspace\foo 调用 R。
我已经尝试了所有提供的建议 Lua programming - os.execute() is not working in Windows 和 Why won't applications in Program Files run using os.execute in lua? 但我的问题似乎是另一个问题,甚至可能不在语法上,而是在其他地方?
当我直接在命令提示符中键入这些命令时,它们会起作用。我以管理员身份使用 Windows 7 Professional,并使用带有 Eclipse 的 Lua 5.1.4。
这是我迄今为止尝试过的:
os.execute("echo 'hehe' > C:\folder\tempworkspace\foo")
os.execute [["echo 'hehe' > C:\folder\tempworkspace\foo"]]
os.execute [["echo 'hehe' > 'C:\folder\tempworkspace\foo'"]]
os.execute [[echo 'hehe' > C:\folder\tempworkspace\foo]]
os.execute [[echo 'hehe' > C:\\folder\\tempworkspace\\foo]]
os.execute[[cmd.exe /c echo 'hehe' > C:\folder\tempworkspace\foo]]
os.execute("cmd.exe /c echo 'hehe' > C:\\folder\\tempworkspace\\foo")
os.execute("cmd.exe /c echo 'hehe' > 'C:\\folder\\tempworkspace\\foo'")
如果您有任何改进我的代码的建议,我将不胜感激。 (注意:我正在写入文件,因为我想稍后在 lua 中使用输出。另一种方法是使用 io.popen() 已在某处提出,但据说它依赖于平台,无论如何我的当我尝试使用 x = io.popen("R -q -e 'rnorm(10)'") 时 Lua 崩溃。
在第一次回答后编辑:
您的 sendMsg 功能在我的计算机上也无法正常工作,而且我没有收到任何错误,我真的想知道是什么问题。对于 pcall,我这样做对吗?由于print(err) 行没有打印任何内容,我想知道我是否做得正确。
function sendMsg(cmd, msg, fpath)
local output = cmd.. " ".. msg.. " > ".. fpath
print(output)
os.execute(output)
end
function sendMsgArgs()
sendMsg("echo", "huhu", "C:\\merret\\tempworkspace\\foo");
end
err = pcall(sendMsgArgs)
if err == true then
print("THIS WORKED")
else
print("THIS DID NOT WORK")
print(err)
end
编辑:这实际上是一个 Eclipse/编辑器问题。所以想加一些标签,比如lua-eclipse,但是不能。
【问题讨论】:
-
从您尝试的 8 个 os.execute(...) 命令的第一个列表中,实际上第 2、4、5、6 和 7 行的版本可以在我的计算机上运行!你确定你对目录有写权限吗?
-
这很有趣。当我从普通命令提示符执行相同的命令时,它们会起作用。我也是管理员。所以我想我有写权限。但我会错吗?通过 Lua 执行命令时,写访问权限会有所不同吗?我怎样才能找到/改变这个?你知道吗?那会很有帮助!
-
pcall() 返回 2 个值,一个布尔值和一个错误字符串(如果发生错误)。因此,如果
result为假,请将您的第二个 sn-p 更改为local result, error = pcall(sendMsgArgs)和print(error)。这可能会告诉你出了什么问题。
标签: eclipse lua command-prompt