首页 > 代码库 > sys和os modules

sys和os modules

http://blog.csdn.net/pipisorry/article/details/42167683

Python的系统模块包括:sys, os, glob, socket, threading, _thread, queue, time, timeit, subprocess, multiprocessing, signal, select, shutil, tempfile等。

大多数系统级接口集中在:sys和os两个模块。

sys模块包含:
    平台与版本的信息,如sys.platform, sys.maxsize, sys.version
    模块搜索路径sys.path
    模块表sys.modules,这是一个包含python程序中import进来的模块的name:module信息的字典
    异常信息,如sys.exc_info()
    命令行参数sys.argv
    标准流,如sys.stdin, sys.stdout, sys.stderr
    程序退出调用sys.exit

os模块包含
    Tasks    Tools
    Shell variables    os.environ
    Running programs    os.system, os.popen, os.execv, os.spawnv
    Spawning processes    os.fork, os.pipe, os.waitpid, os.kill
    Descriptor files, locks    os.open, os.read, os.write
    File processing    os.remove, os.rename, os.mkfifo, os.mkdir, os.rmdir
    Administrative tools    os.getcwd, os.chdir, os.chmod, os.getpid, os.listdir, os.access
    Portability tools    os.sep, os.pathsep, os.curdir, os.path.split, os.path.join
    Pathname tools    os.path.exists(‘path‘), os.path.isdir(‘path‘), os.path.getsize(‘path‘)


os:

模块包含普遍的操作系统功能。利用这个模块可以写出与平台无关的程序,比如就是使用os.sep可以取代操作系统特定的路径分割符。

常用的方法:

os.name:获取当前系统平台,Windows下返回‘nt‘,Linux下返回‘posix‘。

os.linesep:获取当前平台使用的行终止符。Windows下返回‘/r/n‘,Linux使用‘/n‘。

os.getcwd(): 获取当前工作目录,即当前python脚本工作的目录路径。

os.listdir(path):返回指定目录下的所有文件和目录名。

os.remove(path/filename)函数用来删除一个文件。

os.system()函数用来运行shell命令。此命令可以方便的调用或执行其他脚本和命令

  1. #打开记事本  
  2. >>>os.system(‘notepad‘)  
  3. #打开指定的文件  
  4. >>>os.system(‘notepad *.txt‘)  

os.path.split()函数返回一个路径的目录名和文件名。

  1. >>> os.path.split(‘/home/shirley/myself/code/icbc.txt‘)  
  2. (‘/home/shirley/myself/code‘‘icbc.txt‘)  

os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。

os.path.existe()函数用来检验给出的路径是否真地存在。


sys:

sys模块可以参看python文档 http://docs.python.org/library/sys.html。

常用的函数:

sys.argv: 实现从程序外部向程序传递参数。

  1. import sys  
  2. print sys.argv[0]  
  3. print sys.argv[1]  
  4. print sys.argv[2]
  1. >>>python print.py arg1 arg2  

一般来说,argv[0]代表的是执行的程序的文件名。

sys.exit([arg]): 程序中间的退出,arg=0为正常退出。

sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。

sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行setdefaultencoding(‘utf8‘),此时将系统默认编码设置为utf8。(见设置系统默认编码 )

sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回‘mbcs‘,mac下返回‘utf-8‘.

sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

sys.platform: 获取当前系统平台。


获得Python脚本所在目录的位置

1.以前的方法
如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数。

如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得。实际上sys.path是Python会去寻找模块的搜索路径列表,sys.path[0]和sys.argv[0]是一回事因为Python会自动把sys.argv[0]加入sys.path。

具体来说,如果你在C:\test目录下执行python getpath\getpath.py,那么os.getcwd()会输出“C:\test”,sys.path[0]会输出“C:\test\getpath”。

更特别地,如果你用py2exe模块把Python脚本编译为可执行文件,那么sys.path[0]的输出还会变化:
如果把依赖库用默认的方式打包为zip文件,那么sys.path[0]会输出“C:\test\getpath\libarary.zip”;
如果在setup.py里面指定zipfile=None参数,依赖库就会被打包到exe文件里面,那么sys.path[0]会输出“C:\test\getpath\getpath.exe”。

2.正确的方法
但以上这些其实都不是脚本文件所在目录的位置。
比如C:\test目录下还有一个名为sub的目录;C:\test目录下有getpath.py,sub目录下有sub_path.py,getpath.py调用sub_path.py;我们在C:\test下执行getpath.py。如果我们在sub_path.py里面使用sys.path[0],那么其实得到的是getpath.py所在的目录路径“C:\test”,因为Python虚拟机是从getpath.py开始执行的。如果想得到sub_path.py的路径,那么得这样:
os.path.split(os.path.realpath(__file__))[0]
其中__file__虽然是所在.py文件的完整路径,但是这个变量有时候返回相对路径,有时候返回绝对路径,因此还要用os.path.realpath()函数来处理一下。也即在这个例子里,os.path.realpath(__file__)输出是“C:\test\sub\sub_path.py”,而os.path.split(os.path.realpath(__file__))[0]输出才是“C:\test\sub”。

3.实例说明
os.getcwd()、sys.path[0] (sys.argv[0])和__file__的区别是这样的:
假设目录结构是:
 C:\test
  |
  [dir] getpath
    |
    [file] path.py
    [dir] sub
      |
      [file] sub_path.py

然后我们在C:\test下面执行python getpath/path.py,这时sub_path.py里面与各种用法对应的值其实是:
    os.getcwd() “C:\test”,取的是起始执行目录
    sys.path[0]或sys.argv[0] “C:\test\getpath”,取的是被初始执行的脚本的所在目录
    os.path.split(os.path.realpath(__file__))[0] “C:\test\getpath\sub”,取的是__file__所在文件sub_path.py的所在目录 

【如何获得Python脚本所在目录的位置】


from:http://blog.csdn.net/pipisorry/article/details/42167683


sys和os modules