前言

今天这个函数说起来应该是有两重身份的,首先它是一个和文件相关的函数,另外他又是一个可以执行命令的函数,这一点和之前讲过的函数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()
  • 运行结果

img

io_popen.png

总结

  • 使用这个函数需要的注意的是这个函数是依赖于操作系统的,也就是说并不是所有的系统都可以返回正确的结果。
  • 读取文件内容之前最好检测一下文件描述符的有效性,尽可能的避免程序出错。
  • 从运行的结果来看,使用这个函数来执行命令,和直接在命令行界面执行命令的结果上一样的,只不过使用函数这种方式的结果保存在文件中。
最后修改:2020 年 10 月 14 日 09 : 09 PM
如果您觉得本文有帮助,且您手头手头宽裕,可以打赏小站,不胜感激