subprocess 称之为子进程,进程是一个正在运行的程序
为什么要使用子进程,因为之前的os.system()函数无法获取命令的执行结果,另一个问题是当我们启动了某一其他进程时无法与这个子进程进行通讯,
当要在python程序中执行系统指令时 就应该使用subprocess 自动化运维经常会使用
测试res = os.system("python")print(res)res结果为执行状态理解了三个参数的意义后让我们来实现一个小功能
一个子进程执行tasklist命令获取所有的任务信息,然后将结果交给另一个进程进行查找
另一个子进程执行findstr 查找某个任务信息
p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)p2 = subprocess.Popen("findstr smss",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE)print(p2.stdout.read())总结: subprocess 主要用于执行系统命令,对比sys.system 区别在于可以在进程间交换数据
confiparser,翻译为配置解析,很显然,他是用来解析配置文件的,
何为配置文件?
用于编写程序的配置信息的文件
何为配置信息?
为了提高程序的扩展性,我们会把一些程序中需要用到的值交给用户来确定,比如迅雷的下载目录,同时下载数,qq的提示音等等,
作为配置信息的数据 应满足两个条件
1.数据的值不是固定的
2.可以由用户来指定的
例如我们做一个登录功能,为了方便使用我们可以将用户的用户名密码写到配置文件中,可以不需要每次都输入
在使用该模块前必须要先知道其配置文件的格式,由于读写文件的代码是模块封装好的,所以必须按照固定的方式来边编写,才能被正常解析, 当然并不是只有python有配置文件,其他任何语言都有,但是格式是相同的!
格式:
配置文件中只允许出现两种类型的数据
第一种 section 分区 方括号中是分区的名称 例如:[ATM ]
第二种 option 选项 名称 = 值
注意:
不能出现重复的分区名
同一个分区下不能有相同的选项名
值可以是任何类型 且字符串不需要加引号
总结configparser 用于解析配置文件,虽然可以修改和,创建,配置文件,但是并不常用,解析才是其核心功能!
什么是XML
XML与JSON的对比
XML文档格式
使用XML模块解析
全称叫做可扩展标记语言
是一种定义电子文档结构和描述的语言,可以用来标记数据、定义数据类型
用户可以对自己的标记语言进行定义和扩展,由W3C(万维网标准组织)推出,几乎所有的编程语言都支持该格式
标记翻译为标签,标签指的是某种特殊符号,简单的说XML就是用标签来定义文档结构和数据
来看一个例子:
<person name="jack">hello i am a person</person>一个完整的标签分为三个部分
标签名(tagname): person
属性(attribute): name 值为jack
文本(text): hello i am a person
属性和文本都是可选的,所以你可以这样来定义一个空标签
<person></person>其他格式要求:
一、任何的起始标签都必须有一个结束标签。
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<person/>。XML解析器会将其翻译成<person></person>。
三、标签必须按顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
四、所有的属性都必须有值。
五、所有的属性都必须在值的周围加上双引号。
六、最外层必须有且只能有一个标签,称为根标签
json是JavaScript语言的对象表示法,其仅支持js中的数据类型,(虽然大多数情况下是足够使用的),之所以出现是因为在开发中,通常都需要后台向前台传输数据,那自然是要传输前台能看懂的数据格式,json就是这样一种数据格式,可以轻松的被js语言解析,使用场景多为前后台交互
而xml支持的数据类型理论上是不受限制的,因为可以完全自定义标签的结构和含义,使用场景也非常广泛,不局限于前后台的数据交互,在一些语言中还经常作为配置文件来使用
另外,HTML 看起来与XML非常的类似,的确,HTML也属于XML
如果仅仅将XML用做数据交换格式的话,远不如json来的简单,由于出现时间的关系,有很多早期项目都是使用XML来完成的
准备数据
<?xml version="1.0"?><data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country></data>1.三个用于查找标签函数
iter("标签名") #全文查找find("标签名") #查找子节点匹配的第一个findall("标签名") #查找子节点匹配的所有标签2.访问标签的内容
element.tag 获取标签名element.attrib 获取属性element.text 获取文本3.修改文档内容
elment.tag = "标签名"element.text = "文本"element.set("属性名","属性值")4.删除节点
root.remove(标签对象)5.添加子标签
#创建标签对象year2=ET.Element('year2') # 指定名称year2.text='新年' year2.attrib={'update':'yes'}#添加country.append(year2) #往country节点下添加子节点删除添加修改后都需要调用write写入到文件
tree.write("文件名"),#注意文档对象才能执行写入操作
总结,xml的解析比起json而言非常复杂 因为其扩展性远比json高,在java中常作为配置文件,当你在前后台进行数据交互时,优先使用json格式
转载于:https://www.cnblogs.com/haojunliancheng/p/10871407.html
