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

时间: 2024-10-28 23:57:19

sys和os modules的相关文章

sys模块\os模块

sys模块是和python解释器打交道的 sys.path sys.modules sys.exit sys.argv os模块 os.getwcd() 在哪个地方执行命令,getwcd的结果就是哪个路径 os.curdir:返回'.' os.pardir:返回'..' os.mkdir('dir'):创造一个文件夹 os.mkdir('dir1\dir2'):创建dir1下的dir2文件 os.makedirs('dir1\dir2\dir3',exit_ok=True):可创建多个文件夹 o

Python中sys和os模块的区别

sys: This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter. It is always available. 参见:https://docs.python.org/3/library/sys.html os:This module provides a por

python常用的一些东西——sys、os等(转)

1.常用内置函数:(不用import就可以直接使用)      help(obj) 在线帮助, obj可是任何类型     callable(obj) 查看一个obj是不是可以像函数一样调用     repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝     eval_r(str) 表示合法的python表达式,返回这个表达式     dir(obj) 查看obj的name space中可见的name     hasattr(obj,name) 查看一个o

python常用的一些东西——sys、os等

1.常用内置函数:(不用import就可以直接使用)      help(obj) 在线帮助, obj可是任何类型     callable(obj) 查看一个obj是不是可以像函数一样调用     repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝     eval_r(str) 表示合法的python表达式,返回这个表达式     dir(obj) 查看obj的name space中可见的name     hasattr(obj,name) 查看一个o

python中sys和os的区别

<os和sys的官方解释> ?os os: This module provides a portable way of using operating system dependent functionality. 这个模块提供了一种方便的使用操作系统函数的方法. ?sys sys: This module provides access to some variables used or maintained by the interpreter and to functions that

(python) 标准模块sys和os的使用

一.sys模块 包含了系统的相关的功能.我们来学习sys.argv,它包含命令行参数. 例子:定义了一个add函数,用来实现两个整数的相加. #! coding=utf-8 # usersys.py import sys def add(a,b): print a+b print sys.argv if len(sys.argv)<2: print "argv is lower 2" else: if sys.argv[1].startswith("-") a

python之sys与os模块详解

sys模块: sys.argv        命令行参数List,第一个元素是程序本身路径 sys.exit(n)      退出程序,正常退出时exit(0) sys.version      获取Python解释程序的版本信息 sys.maxint       最大的Int值 sys.path        返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform     返回操作系统平台名称 sys.stdin      输入相关 sys.stdout  

Python常用模块-SYS、OS、Time、hashlib

MarkdownPad Document 时间模块 import time 三种时间表达形式: 1.时间戳 time.time()  相对于1970年到现在的秒数 2.格式化的时间字符串 time.strftime("%Y-%m-%d %X") -可以是:可以是/ '2017-04-26 00:32:18' 3.时间元组(结构化时间) time.localtime() time.struct_time(tm_year=2017, tm_mon=4, tm_mday=26, tm_hou

Python程序退出方式(sys.exit() os._exit() os.kill() os.popen(...))

对于如何结束一个Python程序或者用Python操作去结束一个进程等,Python本身给出了好几种方法,而这些方式也存在着一些区别,对相关的几种方法看了并实践了下,同时也记录下. 参考: Python 核心编程(第二版) http://www.zhihu.com/question/21187839 1. sys.exit() 执行该语句会直接退出程序,这也是经常使用的方法,也不需要考虑平台等因素的影响,一般是退出Python程序的首选方法. 该方法中包含一个参数status,默认为0,表示正常