(三)os模块

来源:互联网 发布:淘宝自定义区怎么设置 编辑:程序博客网 时间:2024/05/21 15:39

os是python的两大核心系统模块之一,另一个是sys模块。它包含了所有C中常用的系统调用和命令脚本。包括目录,进程,命令行变量,诸如此类。从技术上说,os模块提供了POSIX工具(跨平台的系统调用)和一个与平台无关的目录处理子模块os.path。从操作上说,os模块提供了访问计算机系统调用的接口:引用了os和os.path模块的脚本可以在任意平台上运行。除此之外,os还专门为某些平台提供服务工具(比如,在Unix上的低级进程调用);总的来说,os模块是跨平台的。

os

查看os的属性名

dir(os)

管理工具

os.getpid() 获取os调用进程的id

os.getcwd() 获取当前工作目录(current working directory)

os.chdir(dir) 改变当前工作目录

os.startfile(filename) 打开一个文件

os.startfile("webpage.html") # open file in your web browseros.startfile("document.doc") # open file in Microsoft Wordos.startfile("myscript.py") # run file with Python

可移植常量

os.pathsep 目录间隔符(windows/DOS下为分号,Unix为冒号)

os.sep 目录成分间隔符(windows下为'\',Unix为'/')

os.pardir 上层目录

os.curdir 当前目录

os.linesep 行分隔符(windows下为'\r\n')

运行命令行

os.system 在python脚本中运行命令行指令,返回的是命令行的执行状态(0表示成功,1表示失败)

os.popen 运行命令行指令,创建一个仿文件对象(file-like object)。默认的情况下创建模式为'r',是只读的,要支持写入,需要添加'w'模式(第六节会探讨os.popen的重定向)

>>> f = os.popen('echo hello')#f = os.popen('echo hello','r')>>> f.read()'hello\n'

subprocess模块

这个模块提供运行命令行指令的接口,比os.system和os.popen更灵活

subprocess.call('cmd /C "command line"')#和os.system功能一样subprocess.call(cmdLine, shell = False)#shell默认值为False,为True表示使用命令解析器(如MS-DOS)pipeObject = subprocess.Popen(cmdLine, stdout = subprocess.PIPE,shell = False)#输出流使用subprocess.PIPE管道pipeObject.communicate()#返回二元组,第一个元素是执行的结果,第二个元素是NonepipeObject.returncode()#命令执行的状态码(0表示成功)pipeObject.stdout#仿文件对象,存储命令执行结果pipeObject.wait()#等待命令执行结束,返回的是执行状态码(0表示成功)

缺陷

虽然os.system,os.popen,subprocess.call和subprocess.Popen接口是可移植的,但是运行的指令不一定是可移植的。所以它们的可移植性会打折扣;

在程序中直接运行另一个脚本程序比导入和调用本地函数要慢得多。在运行os.system/os.popen语句时,开启命令行中的脚本程序会另起一个进程;

os.system执行的时候,会堵塞调用者,直到命令行执行结束。为解决这个问题,在linux/Unix系统中,可以在命令行的结尾添加一个'&';在windows的中,使用MS-DOS的start指令可以将命令行在命令解析器中执行(如MS-DOS)。

os.path

查看嵌套模块os.path的属性名

dir(os.path)

os.path模块工具
os.path.isfile(fullname/name)#是否文件,fullname是完整文件名(如"C:\\file\\1.txt")os.path.isdir(directory)#是否目录os.path.split(fullname)#将完整文件名分割为一个二元组,第一个为文件目录,第二个为文件名os.path.join(directory, name)#将目录和文件名拼接为一个完整文件名os.path.dirname(fullname)#获取完整文件名中的文件目录os.path.basename(fullname)#获取完整文件名中的文件名os.path.splitext(fullname/name)#将文件名和后缀提取出来,拼接为一个二元组os.path.normpath(directory)#如果directory中既有'\'也有'/',则根据当前的操作系统,统一为'\\'或者'/'os.path.abspath(directory)#获取directory所在的绝对目录




0 0