os模块 - QLGQ/learning-python GitHub Wiki
Introduction
Python编程时,经常和文件、目录打交道,这时就离不开os模块。os模块包含普遍的操作系统功能,与具体的平台无关。
Common Commands
- os.name:判断现在正在使用的平台,Windows返回'nt';Linux返回'posix'
- os.getcwd():得到当前的工作目录
- os.listdir('dirname'):返回指定目录下所有的文件和目录名
- os.remove('filename'):删除指定文件
- os.rmdir('dirname'):删除指定单级目录
- os.mkdir('dirname'):创建目录(这样只能建立一层,要想递归建立可用:os.makedirs('dirname/dirname'))
- os.path.isfile():判断指定对象是否为文件,是返回True,否则返回False
- os.path.isdir():判断指定对象是否为目录,是返回True,否则返回False
- os.path.exists():检验指定的对象是否存在,是True,否则False
- os.path.split():返回路径的目录和文件名(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
- os.system():执行shell命令
- os.chdir():改变目录到指定目录
- os.path.getsize():获得文件的大小,如果为目录,则为零
- os.path.abspath():获得绝对路径
- os.path.join(path, name):连接目录和文件名
- os.path.basename(path):返回文件名(返回该路径的最后一个目录或者文件,如果path以/或\结尾,那么就会返回空值)
- os.path.dirname(path):返回文件路径(返回该路径的父目录)
- os.path.getmtime(path):返回在此path下最后一次修改的时间
- os.rename("oldname", "newname"):重命名文件
- os.environ:获取系统环境变量
Python执行系统命令的方法
os.system("cmd")
这是最简单的一种方法,特点是执行的时候程序会打出cmd在Linux上执行的信息。使用前需要import os。
>>> import os
>>> os.system("ls")
bbs execl manage.py requirements.txt static upload
data.json jdjy readme.md software templates
0
commands.getstatusoutput("cmd")
通过 commands.getstatusoutput() 一个方法就可以获得到返回值和输出。这个方法也不会打印出cmd在linux上执行的信息。这个方法唯一的优点是,它不是一个阻塞的方法。即没有Popen函数阻塞的问题。使用前需要import commands。
>>> import commands
>>> status, output = commands.getstatusoutput("ls")
>>> status
0
>>> output
'bbs\ndata.json\nexecl\njdjy\nmanage.py\nreadme.md\nrequirements.txt\nsoftware\nstatic\ntemplates\nupload'
>>> commands.getstatusoutput("ls")
(0, 'bbs\ndata.json\nexecl\njdjy\nmanage.py\nreadme.md\nrequirements.txt\nsoftware\nstatic\ntemplates\nupload')
还有只获得output和status的方法:
commands.getoutput("ls")
commands.getstatus("ls")
os.popen()
通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。
>>> import os
>>> os.popen("ls")
<open file 'ls', mode 'r' at 0x7f6f0c99fc90>
>>> os.popen("ls").read()
'bbs\ndata.json\nexecl\njdjy\nmanage.py\nreadme.md\nrequirements.txt\nsoftware\nstatic\ntemplates
>>> print os.popen("ls").read()
bbs
data.json
execl
jdjy
manage.py
readme.md
requirements.txt
software
static
templates
upload
os.system("cmd")的返回值只会有0(成功),1,2;os.popen("cmd")会把执行的cmd的输出作为值返回。
subprocess.Popen("cmd")
subprocess模块被推荐用来替换一些老的模块和函数,如os.system、os.spawn*、os.popen()等。
subprocess模块目的是启动一个新的进程并与之通信,最常用是定义类Popen,使用Popen可以创建进程,并与进程进行复杂的交互。其函数原型为:
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)