Вам не нужно запускать другой экземпляр Lua для запуска другого сценария Lua 1 . Если вы просто хотите вызвать другой скрипт 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
, достаточном для исключения из него.
1 : Любой скрипт, который будет запускаться таким образом, будет иметь только базовые возможности lua
и никакого подключения к вашему родительскому скрипту - при условии, что у пользователя даже есть автономный * Установлен интерпретатор 1047 * и в его PATH, что маловероятно в игровой среде Windows.