50

当我在 Lua 中执行“os.execute”时,控制台会快速弹出,执行命令,然后关闭。但是有没有办法只使用标准 Lua 库来取回控制台输出?

4

3 回答 3

71

如果你有 io.popen,那么这就是我使用的:

函数 os.capture(cmd, raw)
  本地 f = 断言(io.popen(cmd,'r'))
  本地 s = assert(f:read('*a'))
  f:关闭()
  如果原始则返回 s 结束
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  返回
结尾

如果您没有 io.popen,那么您的系统上可能没有 popen(3),并且您处于深酸奶中。但是所有的 unix/mac/windows Lua 端口都会有 io.popen。

gsub业务去掉前导和尾随空格并将换行符转换为空格,这大致是 shell 对其$(...)语法所做的。)

于 2008-11-28T21:19:22.327 回答
28

我想你想要这个http://pgl.yoyo.org/luai/i/io.popen io.popen。但它并不总是被编译进去。

于 2008-09-27T08:56:01.633 回答
1

我不具体了解 Lua,但您通常可以运行以下命令:

comd >comd.txt 2>&1

将输出和错误捕获到文件 comd.txt,然后使用语言文件 I/O 函数将其读入。

如果语言本身不提供捕获标准输出和错误,我会这样做。

于 2008-09-25T10:11:05.397 回答