Lua io.popen()

前言#

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

  • 运行结果
io_popen.png

总结#

  • 使用这个函数需要的注意的是这个函数是依赖于操作系统的,也就是说并不是所有的系统都可以返回正确的结果。
  • 读取文件内容之前最好检测一下文件描述符的有效性,尽可能的避免程序出错。
  • 从运行的结果来看,使用这个函数来执行命令,和直接在命令行界面执行命令的结果上一样的,只不过使用函数这种方式的结果保存在文件中。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 30,472评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 131,263评论 18 138
  • 这是故乡秋天的清晨 踏着晶莹的露水和着微风 路过那曲折的小路―― 去看日出。 看腾云缭绕的雾气 托着那高高的山峰 ...
    宁久微初心不改阅读 81评论 0 0
  • 抽象是一种能让你在关注某一概念的同时可以放心忽略其中一些细节的能力。 大约一年前,朋友曾对我说,对程序员来说抽象思...
    hello_小丁同学阅读 2,097评论 1 2