我遇到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作为管理员,使用Lua 5.1.4使用Eclipse。
这是我到目前为止所尝试的内容:
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,但我不能。
答案 0 :(得分:1)
它已经有一段时间了,但最后(感谢同事),我发现问题不是Lua代码,而是实际从Eclipse执行Lua(我使用的是Lua Eclipse插件)。
使用代码
执行lua文件x = os.execute('R -q -e rnorm(10) > C:/folder/something/foo')
print(x)
从命令提示符或使用Crimson Editor(见下文),它运行良好,并返回状态代码0(而不是从Eclipse执行时为-1)。
非常感谢所有助手! 那件事
PS:对于任何有兴趣的人,我都使用Lua作为TerraME环境的一部分,http://www.terrame.org/doku.php。还有一个关于如何使用Crimson Editor的描述。
答案 1 :(得分:0)
这段代码适用于我的Win7盒子:
function sendMsg(cmd, msg, fpath)
local output = cmd.. " ".. msg.. " > ".. fpath
print(output)
os.execute(output)
end
sendMsg("echo", "hehe", "C:\\path\\to\\foo");
在尝试写入文件之前,您需要确保该文件存在。你是从lua口译员那里运行的吗?如果写入失败,你会收到任何错误消息吗?
或者 - 您可以使用io.open()并以此方式编写。将它包装在函数中并使用pcall()调用它可能会为您提供更多信息,如果您有某种窗口问题打开/读取到该位置。
local fout = io.open("C:\\path\\to\\foo", "w+")
fout:write("hehe")
fout:close()
使用pcall的示例:
local result, error = pcall(sendMsg, "echo", "huhu", "C:\\merret\\tempworkspace\\foo")
if result == false then
print(error)
else
print("success!")
end
答案 2 :(得分:0)
如果您尝试写入的路径包含空格,则必须在Windows下用双引号括起来;单引号会引发错误。
因此,以下对我来说没问题:
os.execute([[ echo test > "C:\\Program Files\\xyz.txt" ]])