python模块之os模块

  Python os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。可以在命令行中输入help(),然后输入os,就能看到os的所有方法。

一. 常用方法

1 os.name

判断现在正在使用的平台,windows返回 ‘nt’; Linux 返回’posix’.

2 os.path

返回os模块所在的路径

3 os.getcwd()

返回当前的工作目录,即当前python脚本所在的工作目录.

4 os.listdir(folder)

指定所有目录下所有的文件和目录名.如果我们想要遍历某个目录下的所有文件,就可用到此,举个栗子:

#遍历folder中的所有文件并打开这些文件
import os

files = os.listdir(folder)

for filename in files:
    file = folder + filename
    fr = open(file)
    …………

5 os.remove(path)

删除指定文件

6 os.rmdir(folder)

删除指定目录

7 os.mkdir(floder)

创建单层目录

8 os.makedirs(folder)

递归建立目录

9 os.path.isdir(name)

判断name是不是一个目录,name不是目录就返回false

10 os.path.isfile(name)

判断name是不是一个文件,不存在name也返回false

11 os.path.exists(name)

判断是否存在文件或目录name

12 os.path.getsize(name)

获得文件大小,如果name是目录返回0L

13 os.path.abspath(file/folder)

获得文件或者目录的绝对路径

14 os.path.pardir

获得父目录

15 os.path.normpath(path)

规范path字符串形式

os.path.normpath("a/b/c\d")       #输出'a/b/c\\d'
os.path.normpath("a://b/c/d")     #输出'a:/b/c/d'

16 os.path.split(path)

分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)

os.path.split("/a/b/c/test.txt")  #输出('/a/b/c', 'test.txt')
os.path.split("/a/b/c/")          #输出('/a/b/c', '')

17 os.path.splitext(path)

分离文件名与扩展名

os.path.split("/a/b/c/test.txt")  #输出('/a/b/c/test', '.txt')

18 os.path.join(path,name)

连接目录与文件名或目录

19 os.path.basename(path)

返回文件名

20 os.path.dirname(path)

返回目录名

21 os.path.realpath(filename)

返回文件的真实目录,和os.path.abspath()类似

22 os.chdir(folder)

改变工作目录到folder

#在'/a/b/c/test.py'中需要执行'/d/e/hadoop/'目录下的'./bin/hadoop fs -ls ……',除了直接用绝对路径外,还可以在程序中改变工作目录

os.chdir('/d/e/hadoop/')
os.getcwd()   # '/d/e/hadoop'

23 os.curdir

返回但前目录(’.’)

24 os.sep

操作系统路径分隔符

25 os.getenv()和os.putenv()

分别用来读取和设置环境变量

二. os.environ详解

  os.environ可以获得一些有关系统的各种信息。对于官方的解释,environ是一个字符串所对应环境的映像对象。这是什么意思呢?举个例子来说,environ[‘HOME’]就代表了当前这个用户的主目录。

windows:
 os.environ[‘HOMEPATH’]    #当前用户主目录。
 os.environ[‘TEMP’]       #临时目录路径。
 os.environ[PATHEXT’]     #可执行文件。
 os.environ[‘SYSTEMROOT’]   #系统主目录。
 os.environ[‘LOGONSERVER’]   #机器名。
 os.environ[‘PROMPT’]     #设置提示符。
linux:
 os.environ[‘USER’]      #当前使用用户。
 os.environ[‘LC_COLLATE’]   #路径扩展的结果排序时的字母顺序。
 os.environ[‘SHELL’]     #使用shell的类型。
 os.environ[‘LAN’]      #使用的语言。
 os.environ[‘SSH_AUTH_SOCK’]  #ssh的执行路径。

三. python执行系统命令的方法

1 os.system(cmd)

返回命令执行的状态,0表示执行成功。

2 os.popen(cmd)

  可以返回命令执行的内容,是file read的对象。因此需要read(),readlines()或者for循环获得返回的内容,但是没有显示命令执行的状态。

3.subprocess.Popen
  popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用wait()方法,但是也不能获得执行的返回值了。

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)  

  这里写图片描述
部分参数的解释:
1) .args

  args参数可以是一个字符串,可以是一个包含程序参数的列表。要执行的程序一般就是这个列表的第一项,或者是字符串本身。
   subprocess.Popen([“cat”,”test.txt”])
   subprocess.Popen(“cat test.txt”)
  这两个之中,后者将不会工作。因为如果是一个字符串的话,必须是程序的路径才可以。但是下面的可以工作
   subprocess.Popen(“cat test.txt”, shell=True)
这是因为它相当于
   subprocess.Popen([“/bin/sh”, “-c”, “cat test.txt”])
  args一般要是一个【列表】。如果args是个字符串的话,会被当做是可执行文件的路径,这样就不能传入任何参数了。

2) .stdin stdout和stderr

  stdin stdout和stderr,分别表示子程序的标准输入、标准输出和标准错误。可选的值有PIPE或者一个有效的文件描述符(其实是个正整数)或者一个文件对象,还有None。如果是PIPE,则表示需要创建一个新的管道,如果是None, 不会做任何重定向工作,子进程的文件描述符会继承父进程的。另外,stderr的值还可以是STDOUT,表示子进程的标准错误也输出到标准输出。

Popen对象:
  这里写图片描述

from subprocess import Popen, PIPE
Popen('ls',shell=True,stderr=PIPE,stderr=PIPE)
p.wait()
if(p.returncode == 0):
    ……

4 commands.getstatusoutput(cmd)
它不是一个阻塞的方法,即没有Popen函数阻塞的问题。它会返回命令执行的状态和返回值(字符串)。

import commands
status, output = commands.getstatusoutput("ls")  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值