Lua os.execute возвращаемое значение - PullRequest
32 голосов
/ 13 марта 2012

Можно ли прочитать следующее из локальной переменной в Lua?

local t = os.execute("echo 'test'")
print(t)

Я просто хочу добиться этого: что бы ни выполнялось через ox.execute и возвращало любое значение, я хотел бы использовать его в Lua - например, echo 'test' выведет test в командной строке bash - is можно ли вернуть возвращаемое значение (в данном случае test) в локальную переменную Lua?

Ответы [ 4 ]

67 голосов
/ 13 марта 2012

Вместо этого можно использовать io.popen(). Это возвращает дескриптор файла, который вы можете использовать, чтобы прочитать выходные данные команды. Может работать что-то вроде следующего:

local handle = io.popen(command)
local result = handle:read("*a")
handle:close()

Обратите внимание, что это будет включать в себя завершающий символ новой строки (если есть), который выдает команда.

4 голосов
/ 29 октября 2012
function GetFiles(mask)
   local files = {}
   local tmpfile = '/tmp/stmp.txt'
   os.execute('ls -1 '..mask..' > '..tmpfile)
   local f = io.open(tmpfile)
   if not f then return files end  
   local k = 1
   for line in f:lines() do
      files[k] = line
      k = k + 1
   end
   f:close()
   return files
 end
0 голосов
/ 18 января 2016

Lua's os.capture возвращает все стандартные выходные данные, поэтому он будет возвращен в эту переменную.

Пример:

local result = os.capture("echo hallo")
print(result)

Печать:

hallo
0 голосов
/ 13 марта 2012

К сожалению, но это невозможно Если программа echo завершит работу с успехом, она вернет 0. Этот код возврата - то, что получает и возвращает функция os.execute ().

if  0 == os.execute("echo 'test'") then 
    local t = "test"
end

Это способ получить то, что вы хотите, я надеюсь, что это поможет вам.

Еще один совет для получения кода возврата функции - ссылка на Lua. Lua-Reference / Учебник

...