我遇到了Lua os.execute()命令的問題。Lua os.execute()不起作用
我只想回顯一個單詞並將其寫入文件,如echo 'aword' > C:\folder\tempworkspace\foo
以嘗試os.execute()命令。直接的C:\ folder \ tempworkspace存在,「foo」是我希望命令創建並填充「aword」的文件的名稱。 後來,當這個工程,我想打電話給R,使用R -q -e "rbinom(1000,1,0.7)" > C:\folder\tempworkspace\foo
。
我已經嘗試過在 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,但是我不能。
從您嘗試的8個os.execute(...)命令的第一個列表中,實際上第2,4,5,6和7行的版本可以在我的計算機上運行!你確定你有寫權限的目錄嗎? – prapin
這很有趣。當我從正常的命令提示符執行相同的命令時,它們工作。我也是管理員。所以我認爲我有寫權限。但我可以錯了嗎?當通過Lua執行命令時,寫入訪問是否會有所不同?我怎樣才能找到/改變這個?你知道嗎?那會很有幫助! – thatthing
pcall()返回2個值,如果發生錯誤,則返回一個bool和一個錯誤字符串。所以如果'result'爲false,則將第二個片段更改爲'local result,error = pcall(sendMsgArgs)'和'print(error)'。這可能會告訴你什麼是錯的。 –