运行系统命令

简介: 运行系统命令

函数 os.execute 用于运行系统命令,它等价于 C 语言中的函数 system 。该函数的参数为表示待执行命令的字符串,返回值为命令运行结束后的状态。其中,第一个返回值是一个布尔类型,当为 true 时表示程序成功运行完成;第二个返回值是一个字符串,当为 "exit" 时表示程序正常运行结束,当为 "signal" 时表示因信号而中断;第三个返回值是返回状态(若程序正常终结)或终结该程序的信号代码


例如,在 POSIXWindows 中都可以使用如下函数创建新目录:

function createDir(dirname)
  os.execute("mkdir" .. dirname)
end


另一个非常有用的函数是 io.popen 。同函数 io.execute 一样,该函数运行一条系统命令,但该函数还可以重定向命令的输入输出,从而使得程序可以向命令中写入或从命令的输出中读取。例如,下列代码使用当前目录中的所有内容构建了一个表:

-- 对于POSIX系统而言,使用'ls'而非'dir'
local f = io.popen("dir /B", "r")
local dir = {}
for entry in f:lines() do
  dir[#dir + 1] = entry
end


其中,函数 io.popen 的第二个参数 "r" 表示从命令的执行结果中读取。由于该函数的默认行为就是这样,所以在上例中这个参数实际是可选的。


下面的示例用于发送一封邮件:

local subject = "some news"
local address = "someone@somewhere.org"
local cmd = string.format("mail -s '%s' '%s'", subject, address)
local f = io.popen(cmd, "w")
f:write([[
  Nothing important to say.
  -- me
]])
f:close()


注意

该脚本只能在安装了相应工具包的 POSIX 系统中运行。上例中函数 io.popen 的第二个参数是 "w" ,表示向该命令中写入。


正如我们在上面的两个例子中看到的一样,函数 os.executeio.popen 都是功能非常强大的函数,但他们也同样是非常依赖于操作系统的。


如果要使用操作系统的其他扩展功能,最好的选择是使用第三方库,比如用于基本目录操作和文件属性操作的 LuaFileSystem ,或者提供了 POSIX.1 标准支持的 luaposix 库。

目录
相关文章
|
运维 Kubernetes 安全
24个K8S常用场景使用命令(推荐收藏)!
24个K8S常用场景使用命令(推荐收藏)!
|
开发框架 缓存 安全
WEBjs命令
WEBjs命令
|
PHP
EasyTask命令整合
EasyTask命令整合
169 0
|
监控
libimobiledevice命令
简介 A library to communicate with services of Apple iOS devices using nativeprotocols. 1、打印app列表 ideviceinstaller -l 2、查看当前已连接的设备的UUID idevice_id -...
1685 0
|
网络协议 数据安全/隐私保护