前言#
今天这个函数说起来应该是有两重身份的,首先它是一个和文件相关的函数,另外他又是一个可以执行命令的函数,这一点和之前讲过的函数os.execute()
有点相似,接下来我们就一起来看一下这个函数的用法。
内容#
io.popen()##
- 原型:io.popen ([prog [, mode]])
- 解释:在额外的进程中启动程序
prog
,并返回用于prog的文件句柄。通俗的来说就是使用这个函数可以调用一个命令(程序),并且返回一个和这个程序相关的文件描述符,一般是这个被调用函数的输出结果,这个文件打开模式由参数mode
确定,有取值"r"
和"w"
两种,分别表示以读、写方式打开,默认是以读的方式。
Usage##
- 首先新建一个文件popentest.lua然后编写以下代码:
-- 打开文件(这个文件保存的是命令dir的结果)
local myfile = io.popen("dir", "r")
if nil == myfile then
print("open file for dir fail")
end
print("\n======commond dir result:")
-- 读取文件内容
for cnt in myfile:lines() do
print(cnt)
end
-- 关闭文件
myfile:close()
local secondfile = io.popen("ipconfig")
if nil == secondfile then
print("open file for ipconfig fail")
end
print("\n======commond ipconfig result:")
-- 读取文件内容
local content = secondfile:read("*a")
print(content)
-- 关闭文件
secondfile:close()
- 运行结果
总结#
- 使用这个函数需要的注意的是这个函数是依赖于操作系统的,也就是说并不是所有的系统都可以返回正确的结果。
- 读取文件内容之前最好检测一下文件描述符的有效性,尽可能的避免程序出错。
- 从运行的结果来看,使用这个函数来执行命令,和直接在命令行界面执行命令的结果上一样的,只不过使用函数这种方式的结果保存在文件中。