Shell 访问

lua-users home
wiki

以下示例与允许 Lua 与 shell 交互相关,例如用于 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

最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2007 年 4 月 17 日下午 5:26 GMT (差异)