获取Lua中os.execute的输出
我不知道Lua中明确,但你通常可以运行一个命令:
comd >comd.txt 2>&1
捕获输出和错误的文件comd.txt,然后用语言文件I/O功能在读它。
这就是我会做,如果语言本身并没有提供捕捉斯塔纳德输出和错误。
想知道同样的事情,这是由于Windows具体,但就是解决了我的方法。传递到执行的整个命令字符串的一个示例是“cmd.exe/c c:\ pathtoit \ someprogram.exe -arg1 somefile> c:\ temp \ out.txt 2>&1”。 2>部分是我的伎俩。 – jdr5ca 2014-06-29 22:44:24
这不是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。
感谢问这个,今天 – 2008-11-17 08:07:10