通用操作系统服务
os
os
:与Python所在底层操作系统相对应变量、函数
os
模块提供了POSIX工具- 操作系统调用的跨平台移至标准
- 不依赖平台的目录处理工具
os.path
包含在C程序、shell脚本中经常用到的所有操作系统调用,涉及 目录、进程、shell变量
实践中,
os
基本可以作为计算机系统调用的可移植接口 使用- 只要技术上可行,
os
模块都能跨平台 - 但在某些平台,
os
提供专属该平台的工具
- 只要技术上可行,
Shell变量
1 | os.environ |
os.environ
os.environ
可以向普通字典一样键索引、赋值
默认继承系统所有环境变量、命令行临时环境变量
在最新的python中,对
os.environ
的键值修改将自动导出 到应用的其他部分os.environ
对象- 进程对应shell环境变量:通过后台调用
os.putenv
生效, 反之不会更新os.environ
python进程、链入C模块、该进程派生子进程都可以获取新的 赋值
- 子进程一般会继承父进程的环境变量设定
- 可以作为传递信息的方式
os.putenv
os.putenv
同时会调用C库中的putenv
(若在系统中可用) 导出设置到python链接的C库- 底层C库没有
putenv
则可将os.environ
作为参数传递
- 底层C库没有
管理工具
1 | os.getpid() |
移植工具
1 | os.sep |
||Linux|Win|Unix|
|———|——————|———|———|
|sep|/
|\
|/
(某些MAC:
)|
|pathsep|:
|;
||
|curdir|.
|||
|pardir|..
|||
|linesep|\n
|\r\n
||
- 借助这些变量可以系统相关字符串操作的跨平台
- win下目录组分隔符是
\
,大部分情况下看到\\
是作为\
转义字符,防止\
和之后字符转义
- 确认不会转义时,直接使用
\
也是可以的- 使用
r''
表示不转义也可以直接使用\
目录、文件操作
1 | os.mkdir(dirname) |
os.listdir
返回值:包含目录中所有条目名称的列表
- 名称不带目录路径前缀
需要注意的是:文件名同样有编码
- 若参数为字节串,返回文件名列表也是字节串
- 参数为字符串,返回文件名列表也是字符串
open
函数也可以类似使用字节串确定需要打开的文件glob.glob
,os.walk
内部都是通过调用os.listdir
实现,行为相同
glob
模块也有遍历目录的能力
os.walk
返回值:返回迭代器
- 每个元素为
(dirname, subdirs, subfile)
- 每个元素为
参数
topdown
:默认True
,自顶向下返回
文件描述符、文件锁
1 | descriptor = os.open(path, flags, mode) |
os
通过调用文件的描述符来处理文件基于文件描述符的文件以字节流形式处理
- 没有字符解码、编码、换行符转换
- 除了缓冲等额外性能,基于描述符的文件和二进制文件模式 对象类似
文件流对象、工具仅仅是在基于描述符的文件的封装
可以通过
.fileno()
获得文件流对象对应文件描述符,sys.stdin
、sys.stdout
、sys.stderr
对应文件 描述符是:0、1、21
2os.write(1, b"hello world\n")
sys.stdout.write("hello world\n")可以通过
os.fdopen
把文件描述符封装进文件流对象1
2
3fdfile = os.open("filename", (os.O_RDWR|os.O_BINARY))
filstream = os.fdopen(fdfile, "r", encoding="utf-8",
closefd=False)
os.open
1 | def os.open(path, |
参数
mode
:需要模式标识符进行二进制操作以得到需要的模式os.O_RDWR
os.O_RDONLY
os.O_WRONLY
os.O_BINARY
os.O_EXCL
:唯一访问权,是python在并发、进程 同步情况下锁定文件最便捷的方法os.O_NONBLOCK
:非阻塞访问
- 其他模式选项参见
os
模块
返回值:文件描述符
- 整数代码、句柄,代表操作系统的中文件
退出进程
1 | os._exit(0) |
io
time
argparse
argparse
:编写用户友好的命令行接口
argparse.ArgumentParser
1 | class argparse.ArgumentParser: |
添加参数
1 | # 添加参数 |
- 参数
action
:关联命令行参数、动作,除以下预定义行为, 还可以传递argparse.Action
子类、相同接口类store
:存储值,默认行为store_const
:存储const
指定值,通常用于在 选项中指定标志store_true
/"store_false"
:类上append
:存储列表,适合多次使用选项append_const
:将const
参数值追加至列表, 适合多个选项需要在同一列表中存储常数 (即多个dest
参数相同)count
:计算选项出现次数help
:打印完整帮助信息version
:打印version
参数值
- `nargs`:参数消耗数目,指定后`pare_args`返回列表,
否则参数消耗由`action`决定
- `int`:消耗参数数目,`nargs=1`产生单元素列表,
和默认不同
- `?/*/+`:类似普通正则,`+`会在没有至少一个参数时
报错
- `argparse.REMAINDER`:所有剩余参数,适合用于从
命令行传递参数至另一命令行
- `const`:保存不从命令行读取、被各种动作需求的常数
- `action="store_const"/"append_const"`:必须给出
- `nargs=?`:气候选项没有参数时,使用`const`替代
- `type`:允许任何类型检查、类型转换,一般内建类型、
函数可以直接使用
- `argparse.FiltType("w")`:为文件读写方便,预定义
类型转换
- `dest`:`parse_args()`返回的参数属性名
- 位置选项:缺省为首个选项名
- 关键字选项:优秀首个`--`开头长选项名,选项目中间
`-`被替换为`_`
参数解析
1 | # 解析参数,无法解析则报错 |
- 说明
- 仅不包含类似负数的选项名,参数才会被尝试解释为负数 位置参数
- 前缀无歧义时,可以前缀匹配
添加子命令
1 | def add_subparsers(self, |
辅助类
动作类
1 | class argparse.Action: |
格式化类
1 | class argparse.ArgumentDefaultHelpFormatter |
其他类
1 | # 容纳属性的类 |