Shell 访问 |
|
[!] 版本说明: 以下代码与旧版本的 Lua 版本(Lua 4)相关。其中一些代码在 Lua 5 中无法按原样运行。
这通过管道读取来自进程的输出。有一种方法可以在 Windows 上使其工作(参见 PipesOnWindows,对于 Lua 5.1.2 不需要,见下文)。
-- Perform a shell command and return its output -- c: command -- returns -- o: output function shell(c) local input = _INPUT local o, h h = readfrom("|" .. c) o = read("*a") closefile(h) _INPUT = input return o end
在 lua5.0.2 上,我认为它应该是这样的
function shell(c) local o, h h = assert(io.popen(c,"r")) o = h:read("*all") h:close() return o end
Lua 5.1.2: io.popen 在 Windows XP 上“开箱即用”运行良好,即使在非 DOS 应用程序中也是如此 - AndreasRozek
在命令行实用程序中,通常需要处理命令行上给出的每个文件。以下是一个封装此过程的函数
-- Process all the files specified on the command-line with function f -- name: the name of the file being read -- i: the number of the argument function processFiles(f) for i = 1, getn(arg) do if arg[i] == "-" then readfrom() else readfrom(arg[i]) end file = arg[i] f(arg[i], i) readfrom() -- close file, if not already closed end end