Когда я делаю "os.execute" в Lua, консоль быстро всплывает, выполняет команду и затем закрывается. Но есть ли способ вернуть консольный вывод только с использованием стандартных библиотек Lua?
Вернуть вывод os.execute в Lua
Ответ 1
Я думаю, вам нужно это http://pgl.yoyo.org/luai/i/io.popen io.popen. Но он не всегда компилируется.
Ответ 2
Если у вас есть io.popen, то это то, что я использую:
function os.capture(cmd, raw)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
if raw then return s end
s = string.gsub(s, '^%s+', '')
s = string.gsub(s, '%s+$', '')
s = string.gsub(s, '[\n\r]+', ' ')
return s
end
Если у вас нет io.popen, то предположительно popen (3) недоступен в вашей системе, и вы находитесь в глубоком йогурте. Но все порты unix/mac/windows Lua будут иметь io.popen.
Ответ 3
Я не знаю о Lua специально, но вы можете вообще запустить команду как:
comd >comd.txt 2>&1
чтобы записать вывод и ошибку в файл comd.txt, а затем использовать функции ввода/вывода файлов языков, чтобы прочитать его.
Как я это сделал бы, если бы сам язык не обеспечивал захват выходов и ошибок строна.