获取Lua中os.execute的输出

问题描述:

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

+2

感谢问这个,今天 – 2008-11-17 08:07:10

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

我不知道Lua中明确,但你通常可以运行一个命令:

comd >comd.txt 2>&1 

捕获输出和错误的文件comd.txt,然后用语言文件I/O功能在读它。

这就是我会做,如果语言本身并没有提供捕捉斯塔纳德输出和错误。

+0

想知道同样的事情,这是由于Windows具体,但就是解决了我的方法。传递到执行的整个命令字符串的一个示例是“cmd.exe/c c:\ pathtoit \ someprogram.exe -arg1 somefile> c:\ temp \ out.txt 2>&1”。 2>部分是我的伎俩。 – jdr5ca 2014-06-29 22:44:24

+0

这不是Windows特定的。它也可以在Unix,Linux,BSD,OS X和许多其他系统中工作。我并不是轻浮的临时文件的最大粉丝,所以我不喜欢这种方法,尽管它在技术上有效。 '2>&1`部分将标准错误(输出2)重定向到标准输出(输出1),该标准输出已被重定向到comd.txt(`>`为`1>`的缩写) – 2014-11-07 22:31:05

如果您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。