我有一個遊戲中沒有外部DLL支持的嵌入式Lua實例。 我想從Lua調用一個程序,它創建了第二個Lua實例。 我的問題是如何調用Lua中的任何程序? 我認爲「os.execute()」解決方案會很糟糕(某些機器上的os.library受限制)。如何從Lua調用程序
1
A
回答
11
你不需要啓動另一個Lua實例來運行另一個Lua腳本。如果您只想調用另一個Lua腳本,則可以使用dofile(filename)
。如果你想這樣做的另一個環境(5.1),你可以做這樣的事情:
local f = assert(load(filename)) -- the assert makes the failure case
-- an error
local env = {} --insert whatever globals you want the script to have
setfenv(f, env) --set the script function to execute with the table
--you have constructed as its environment
f() --Run the script in the constructed environment
如果你真的需要啓動另一個程序(比如,解釋爲不同腳本語言),如果沒有使用os.execute()
(或io.popen()
,另一個捕獲衍生程序的輸入和輸出流的庫函數,即使是更具限制性的),也無法完成此操作。
但是,如果您正在編寫的遊戲腳本不會刪除os.execute()
,則可以安全地假設該功能可在其他用戶的計算機上使用:Lua環境由嵌入應用程序維護(遊戲本身),而不是機器上的任何其他安裝。當談到遊戲,真的有三種情況,你將無法創建子進程:
- 遊戲的開發商已刪除的庫功能,如
os.execute
從遊戲的Lua中的環境。在這種情況下,Lua腳本無法通過設計產生進程:如果仍然可行,那麼限制對函數的訪問就沒有太多意義。 - 遊戲在無法產生子進程的操作環境中運行(例如受限制的服務器帳戶)。在這種情況下,遊戲無法啓動其他程序,即使它想要,因爲它在操作系統級別是禁止的。
- 最終用戶爲其運行的腳本實施了自己的沙箱。在這種情況下,用戶可以做出決定,如果他們相信您的腳本對
os.execute
的需求足以對其進行例外。
:任何腳本,你會在這種方式運行將只擁有基礎lua
設施和腳本 - 假設即使安裝了獨立lua
解釋用戶和他們的路徑到你的父母沒有任何聯繫,這在Windows遊戲環境中不太可能。
相關問題
- 1. 從Lua程序中調用python函數
- 2. 如何遠程調試Lua?
- 3. 如何從Python調用Lua函數?
- 4. 如何從Javascript調用Lua函數
- 5. 從C調用Lua
- 6. 讓Lua調用主機程序?
- 7. 調試運行LUA應用程序
- 8. 如何從另一個lua函數調用lua函數?
- 9. 從iOS應用程序調用Lua腳本
- 10. 從Android應用程序調用Lua腳本
- 11. 如何調用2 .lua
- 12. 從C++調用Lua函數
- 13. 從string_t調用Lua函數
- 14. 如何調用從C#應用程序
- 15. 從C++ Lua回調
- 16. 如何從x86_64程序集調用sprintf?
- 17. 如何從node.js調用java程序?
- 18. 如何從C程序調用notepad.exe?
- 19. 如何從休眠調用程序
- 20. 如何從PowerShell調用Java程序?
- 21. 如何從Perl調用Java程序?
- 22. 如何從C#/ Mono調用Linux程序?
- 23. 如何從.Net調用Java程序?
- 24. 如何從C#調用CICS程序
- 25. 如何從VBA調用python程序?
- 26. 如何從Javascript調用Dart程序?
- 27. 如何從網絡調用程序?
- 28. 如何從Java程序調用calabash xml
- 29. 如何從Cygwin程序調用Win32 API
- 30. 如何從Xamarin Android應用程序調用Android應用程序
意識到即使你可以調用一個外部程序,它聽起來像遊戲開發者已經禁用了,它不會與遊戲相關聯。因此,任何不是內置於庫存lua.exe的函數都將不可用。 – BMitch 2011-06-09 14:56:28