os模块 - QLGQ/learning-python GitHub Wiki

Introduction

Python编程时,经常和文件、目录打交道,这时就离不开os模块。os模块包含普遍的操作系统功能,与具体的平台无关。

Common Commands

  1. os.name:判断现在正在使用的平台,Windows返回'nt';Linux返回'posix'
  2. os.getcwd():得到当前的工作目录
  3. os.listdir('dirname'):返回指定目录下所有的文件和目录名
  4. os.remove('filename'):删除指定文件
  5. os.rmdir('dirname'):删除指定单级目录
  6. os.mkdir('dirname'):创建目录(这样只能建立一层,要想递归建立可用:os.makedirs('dirname/dirname'))
  7. os.path.isfile():判断指定对象是否为文件,是返回True,否则返回False
  8. os.path.isdir():判断指定对象是否为目录,是返回True,否则返回False
  9. os.path.exists():检验指定的对象是否存在,是True,否则False
  10. os.path.split():返回路径的目录和文件名(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
  11. os.system():执行shell命令
  12. os.chdir():改变目录到指定目录
  13. os.path.getsize():获得文件的大小,如果为目录,则为零
  14. os.path.abspath():获得绝对路径
  15. os.path.join(path, name):连接目录和文件名
  16. os.path.basename(path):返回文件名(返回该路径的最后一个目录或者文件,如果path以/或\结尾,那么就会返回空值)
  17. os.path.dirname(path):返回文件路径(返回该路径的父目录)
  18. os.path.getmtime(path):返回在此path下最后一次修改的时间
  19. os.rename("oldname", "newname"):重命名文件
  20. 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)

References

python os模块常用命令
python基础之模块之os模块