您的位置:首页 > 其它

操作系统服务:OS模块

2016-09-06 22:48 337 查看
http://blog.csdn.net/pipisorry/article/details/52454486

一般的操作系统服务之OS模块Generic Operating System Services

os模块

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

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')
[
16.1.1. File Names, Command Line Arguments, and Environment Variables
16.1.2. Process Parameters
16.1.3. File Object Creation
16.1.4. File Descriptor Operations16.1.4.1. Querying the size of a terminal
16.1.4.2. Inheritance of File Descriptors

16.1.5. Files and Directories16.1.5.1. Linux extended attributes

16.1.6. Process Management
16.1.7. Interface to the scheduler
16.1.8. Miscellaneous System Information
16.1.9. Miscellaneous Functions
]

os模块常用的方法

1.os.sep                    可以取代操作系统特定的路径分割符
2.os.name                 字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
3.os.getenv()             用来读取环境变量
6.os.putenv()             用来设置环境变量 。推荐用os.environ,因为使用os.putenv()并不会真正改变os.environ字典里面的环境变量,即某些平台无效,但是使用os.environ有一个潜在的隐患:在一些平台上,包括FreeBSD和Mac OS X,修改environ会导致内存泄露。
os.environ['环境变量名称']='环境变量值' #其中key和value均为string类型
os.putenv('环境变量名称', '环境变量值')
8.os.remove()             函数用来删除一个文件
9.os.system()             函数用来运行shell命令 [python中调用命令行命令]
10.os.linesep               字符串给出当前平台使用的行终止符。例如,Windows使用'/r/n',Linux使用'/n'而Mac使用'/r'。
11. os.access   os.chmod
判断并修改文件读写权限

os目录和文件操作方法和os.path方法

[python文件、目录及路径操作][Python文件输入输出]
皮皮blog

OS系统模块的应用

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

os.getcwd()

如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数。
sys.path[0]和sys.argv[0]
如果是要获得当前执行的脚本的所在目录位置,那么需要使用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”。
正确的方法[b]os.path.split(os.path.realpath(__file__))[0]
[/b]
但以上这些其实都不是脚本文件所在目录的位置。
C:\test
----sub/
    ----sub_path.py

----getpath.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的路径,那么得这样
1. 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”。
2. 神奇的 Python 内部变量 __file__ ,该变量被自动设置为代码所在的 Python 模块文件名。 `` os.path.dirname(__file__)`` 将会获取自身所在的文件。如果在windows下,它会智能地选择正确的后向斜杠”“进行连接,而不是前向斜杠”/”。

实例说明

1 os.getcwd()、sys.path[0] (sys.argv[0])和__file__的区别是这样的:
假设目录结构是:
 C:\test
----getpath
      ----path.py
      ---- sub
            ----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的所在目录
sys.path.append(os.path.join(os.path.split(os.path.realpath(__file__))[0], '../../..'))
3
patternFile = r'data/patterns.txt'
stopwordsFile = r'data/English_stopwords.txt'
pathname = os.path.split(os.path.realpath(__file__))[0]
patternFile = path.join(pathname, patternFile)
如果不是绝对路径的时候,相对路径可能打开文件失败,出错:FileNotFoundError: [Errno 2] No such file or directory: 'data/English_stopwords.txt'
原因是data/patterns.txt是相对当前.py文件的路径,而如果当前执行文件不是它,而是别的py文件调用这个函数,那么那个相对路径就是相对别的py文件而言的,就会找不到路径,所有最好使用上面代码的形式写相对路径,再用改成绝对路径。
[python/matplotlib 如何在默认目录下打开上一级目录的文件?]

文件执行路径、目录

pathname=os.path.dirname(sys.executable)
[python文件、目录及路径操作-获取当前python文件的路径]
[如何获得Python脚本所在目录的位置]
[在python下,获取当前执行主脚本的方法有两个:sys.argv[0]和file]

from: http:// href="http://blog.csdn.net/pipisorry/article/details/52454486" target=_blank>blog.csdn.net/pipisorry/article/details/52454486

ref: [16. Generic Operating System Services]

[16.1.
os
— Miscellaneous operating system interfaces
]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: