Question

When I do an "os.execute" in Lua, a console quickly pops up, executes the command, then closes down. But is there some way of getting back the console output only using the standard Lua libraries?

Was it helpful?

Solution

I think you want this http://pgl.yoyo.org/luai/i/io.popen io.popen. But it's not always compiled in.

OTHER TIPS

If you have io.popen, then this is what I use:

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

If you don't have io.popen, then presumably popen(3) is not available on your system, and you're in deep yoghurt. But all unix/mac/windows Lua ports will have io.popen.

I don't know about Lua specifically but you can generally run a command as:

comd >comd.txt 2>&1

to capture the output and error to the file comd.txt, then use the languages file I/O functions to read it in.

That's how I'd do it if the language itself didn't provide for capturing stanard output and error.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top