Python语法速查: 13. 操作系统服务
本篇索引
(1)sys模块
(2)os模块
(3)与Windows相关模块
(4)subprocess模块
(5)signal模块
(1)sys模块
sys模块用于Python解释器及其环境操作。
● sys模块的常用变量及函数
| 常用变量及函数 | 说明 |
|---|---|
| 常用变量 | |
| argv | 传递给程序的命令行选项列表,argv[0]是程序名。 |
| modules | 将模块名映射到实际存在的模块上的字典,其中只有目前已导入的模块。 |
| path | 查找模块所在目录的目录名列表。 |
| platform | 标识操作系统平台的字符串,如:'Linux', 'win32'等。 |
| version | Python版本字符串。 |
| version_info | 元组表示的Python版本。 |
| prefix | 平台无关的Python所在目录。 |
| exec_prefix | 平台相关的Python所在的目录。 |
| stdin | 标准输入流。 |
| stdout | 标准输出流。 |
| stderr | 标准错误流。 |
| 常用函数 | |
| exit([n]) | 通过引发SystemExit异常来退出Python。n是一个表示状态码的整数,0表示正常,非零表示异常。 |
| getdefaultencoding() | 得到默认的编码方式,如:'utf', 'ascii'等。 |
| setdefaultencoding(enc) | 设置默认的编码。 |
| getfilesystemencoding() | 返回用于将Unicode文件名映射到底层操作系统使用的文件名的编码方式。 |
| getwindowsversion() | 返回一个元组,说明当前Windows版本。 |
| getswitchinterval() | 返回检查间隔值,它设置解释器多久检查信号、线程开关和其他定期事件。 |
| setswitchinterval(n) | 设置上述时间间隔。 |
● sys模块的其他变量
| 变量 | 说明 |
|---|---|
| api_version | Python解释器的C语言版本API的整数。 |
| builtin_module_names | 内置于Python可执行文件中模块的元组。 |
| byteorder | 本机的字节排序方式:'little'(小端) 或 'big'(大端)。 |
| copyright | 版权信息字符串。 |
| __displayhook__ | displatyhook()函数的初始值。 |
| dont_write_bytecode | 导入模块时决定Python是否写字节码的布尔标志。 |
| dllhandle | 针对Python DLL(Windows)的整数句柄。 |
| __excepthook__ | execepthook()函数的初始值。 |
| executable | Python解释器可执行文件名的字符串,如:'Python3' |
| flags | 提供给Python解释器的不同命令行选项设置的对象,详可查见Python手册。 |
| float_info | 有关浮点数内部表示信息的对象,详可查见Python手册。 |
| hexversion | 对sys.version_info中版本信息进行编码后使用的十六进制表示。 |
| last_type, last_value, last_traceback | 遇到未处理的异常和解释器输出一条错误消息时设置这些变量,分别为:最后一个异常的类型、最后一个异常的值、栈追踪。 |
| maxsize | 系统中C的size_t数据类型支持的最大整数值。 |
| maxunicode | 能够表示的最大Unicode码的整数。 |
| ps1, ps2 | 解释器的主要和次要提示符文本的字符串。 |
| py3kwarning | 在Python2中,使用-3选项运行解释器时被设为True的标志。 |
| __stdin__ | 标准输入流的文件对象。 |
| __stdout__ | 标准输出流的文件对象。 |
| __stderr__ | 标准错误流的文件对象。 |
| tracebacklimit | 发生未处理异常时,打印输出的回溯信息的最大级数,默认值是1000。 |
| warnoptions | 使用命令行-W选项提供给解释器的警告选项列表。 |
| winver | 用于在Windows上建立注册表键的版本号 |
● sys模块的其他函数
| 函数 | 说明 |
|---|---|
| _clear_type_cache() | 清除内部类型缓存。 |
| _current_frames() | 在调用时返回将线程标识符映射到执行线程的顶层栈的字典。 |
| displayhook([value]) | 解释器以交互模式运行时,会打印表达式的结果 |
| execpthook(type, value, traceback) | 发生未捕获的异常时调用该函数。 |
| exc_clear() | 清除有关最后一次发生异常的全部信息,只清除调用线程的。 |
| exc_info() | 以元组形式返回当前要处理的异常信息,它是线程安全的。 |
| getdlopenflags() | 在Linux上加载扩展模块时将该参数提供给C函数dlopen()。 |
| _getframe([depth]) | 返回来自调用栈的帧对象。 |
| getprofile() | 返回由setprofile()设置的探查函数。 |
| getrecursionlimit() | 返回函数递归的限制数。 |
| getrefcount(object) | 返回object的引用计数。 |
| getsizeof(object [,default]) | 返回object大小,以字节为单位。 |
| gettrace() | 返回由settrace()设置的跟踪函数。 |
| setdlopenflags(flags) | 设置传递到C的dlopen()函数的标志,用于在Linux上加载扩展模块。 |
| setprofile(pfunc) | 设置系统探查函数,用于实现源代码探查程序。 |
| setrecursionlimit(n) | 设置函数递归限制数。 |
| settrace(tfunc) | 设置系统跟踪函数,用于实现调试器。 |
(2)os模块
os模块提供常用的服务,接口的实现方式依赖于操作系统的内置模块,除非特别指出,一般在Linux和Windows下都是通用的。
● os通用属性
| 变量 | 说明 |
|---|---|
| environ | 当前操作系统的环境变量,以字典形式表现。 |
| linesep | 当前操作系统的换行符。Linux下为:'\n',Windows下为:'\r\n'。 |
| name | os模块的名称,如:'posix', 'nt', 'mac'等 |
| path | 用于路径名操作的依赖于操作系统的标准模块,即用import os.path导入的模块.py文件所在位置。 |
| error | 即指向内置异常exception.OSError。 |
| defpath | 如果环境没有'PATH'变量,那么此变量包含exec*p*()函数使用的默认路径。 |
● 进程环境
以下函数用于访问和修改与运行进程的环境相关的各个参数。
| 函数 | 平台 | 说明 |
|---|---|---|
| 环境变量相关 | ||
| putenv(varname, value) | 通用 | 将环境变量varname设为value,调用putenv()不会更新os.environ,但给os.environ中的项赋值将自动调用putenv()函数。 |
| unsetenv(name) | 通用 | 删除环境变量name。 |
| uname() | Linux | 返回字符串元组:(sysname, nodename, release, version, machine),用于标识系统类型。 |
| seterror(code) | 通用 | 返回对应于code整数错误代码的错误描述字符串。errno模块中定义了这些错误代码的名称。 |
| ctermid() | Linux | 返回当前进程终端的文件名称的字符串,如:'/dev/tty' |
| 进程文件路径相关 | ||
| getcwd() | 通用 | 返回当前进程的工作路径字符串。 |
| getcwdu() | 通用 | 返回当前进程的工作路径Unicode字符串。 |
| chdir(path) | 通用 | 将当前进程的工作目录修改为path。 |
| fchdir(fd) | Linux | 修改当前的工作目录,fd是已打开目录的文件描述符。 |
| chroot(path) | Linux | 修改当前进程的根目录。 |
| umask(mask) | Linux | 设置由当前进程创建的文件的权限数字umask,并返回以前的。主要供下面的os.open()函数使用,详见后文说明。 |
| 进程id相关 | ||
| getpid() | 通用 | 返回当前进程的真实进程ID。 |
| getppid() | 通用 | 返回父进程的进程ID。 |
| getsid(pid) | Linux | 返回进程号为入参pid的进程会话标识符,若pid为0,则返回当前进程的标识符。 |
| setsid() | Linux | 创建一个新的会话并返回新创建的会话ID。 |
| getpgid(pid) | Linux | 返回ID为入参pid的进程的进程组ID,若pid为0,则返回调用进程的进程组。 |
| setpgid(pid, pgrp) | Linux | 将进程pid赋值给进程组pgrp,若pid等于pgrp,进程将成为一个新的进程组主进程。若pid为0,将使用调用进程的进程ID;若pgrp为0,pid指定的进程将成为一个进程组的主进程。 |
| getpgrp() | Linux | 返回当前进程组的ID。 |
| setpgrp() | Linux | 不常用,取决于操作系统是否实现。 |
| 用户id相关 | ||
| getuid() | Linux | 返回当前进程所有者的真实用户ID。 |
| geteuid() | Linux | 返回当前进程所有者的有效用户ID。 |
| getlogin() | Linux | 返回当前进程所有者的用户名。 |
| setuid(uid) | Linux | 设置当前进程的所有者为uid指定的用户ID,需要root权限运行的进程才能执行它。 |
| setreuid(ruid, euid) | Linux | 设置进程所有者为指定的真实用户ID(ruid)和有效用户ID(euid)。 |
| getgid() | Linux | 返回当前进程所有者的用户组ID。 |
| getgroups() | Linux | 返回当前进程所有者所属的用户组ID列表。 |
| setgid(gid) | Linux | 设置当前用户所有者所属组的的用户组ID。 |
| setegid(egid) | Linux | 设置当前用户所有者所属组的的有效用户组ID。 |
| setregid(rgid, egid) | Linux | 设置调用进程的真实用户组ID(rgid)与和有效用户组ID(egid) |
| setgroups(groups) | Linux | 设置当前进程的组访问列表,groups是指定组标识符的一系列整数,需要root权限的进程才能执行它。 |
● 进程管理
以下函数用于创建、销毁和管理进程。
| 函数 | 平台 | 说明 |
|---|---|---|
| 进程操作 | ||
| fork() | Linux | 创建一个子进程,在新创建的子进程中返回0,在原始进程中返回子进程ID。 |
| forkpty() | Linux | 创建一个子进程,并使用一个新的伪终端作为子进程的终端,返回值为 (pid, fd),fd是伪终端的文件描述符。 |
| kill(pid, sig) | Linux | 发送信号sig到进程pid,signal模块中包含信号名称的列表。 |
| killpg(pgid, sig) | Linux | 发送信号sig到进程组pgid,signal模块中包含信号名称的列表。 |
| abort() | 通用 | 生成发送给调用进程的SIGABRT信号 |
| nice(increment) | Linux | 提高进程的调度优先级,返回新的niceness。用户一般只能降低进程的优先级,而提高优先级需要root权限。 |
| _exit(n) | Linux | 使用状态n立即退回到系统,同时不执行任何清理动作,这通常只在由fork()创建的子进程中使用,退出代码n可详查Pyhthon手册。这与调用sys.exit()不同,sys.exit()会正常关闭解释器。 |
| times() | 通用 | 返回一个包含5个浮点数的元组(单位为秒):用户时间、系统时间、子进程的用户时间、子进程的系统时间、按照上述排列的实际用时。Windows上只有前2个时间,后3个都为0。 |
| plock(op) | Linux | 将程序段锁在内存中,从而防止被交换到硬盘上。op是一个整数,用于确定要锁定哪些段。 |
| popen(command [,mode [,bufsize]]) | Linux | 给命令打开一条管道。返回值是连接到管道的打开文件对象,根据模式是'r'还是'w'读取或写入这个文件对象。命令的退出状态由返回的文件对象的close()方法返回。 |
| 执行其他程序 | ||
| system(command) | 通用 | 在shell中执行commmand(字符串),一般用功能更强大的subprocess模块更好。 |
| startfile(path [,operation]) | 通用 | 运行文件path相关的应用程序,相当于在Windows资源管理器中双击文件。在应用程序运行之后,函数就会返回。path的值是相对于当前目录而言,operation是一个可选的字符串,默认值是'open',也可设为:'print', 'edit', 'explore', 'find'等。 |
| exec()族 | ||
| execv(path, args) | 通用 | 使用参数列表args执行程序path,替换当前进程参数列表可以是元组或字符串列表。 |
| execve(path, args, env) | 通用 | 功能同上,但还接受一个字典env,定义了运行环境。 |
| execl(path, arg0, arg1, ...) | 通用 | 等价于execv(path, (arg0, arg1, ...)) |
| execle(path, arg0, arg1, ..., env) | 通用 | 等价于execve(path, (arg0, arg1, ...), env) |
| execvp(path, args) | 通用 | 功能同基础的execv()函数,但在搜索可执行文件的过程中,会使用PATH环境间变量的设置查找文件(从enviro['PATH']获得)。 |
| execlp(path, arg0, arg1, ...) | 通用 | 等价于execvp(path, (arg0, arg1, ...)) |
| execvpe(path, args, env) | 通用 | 基本同execvp(),但还带一个环境变量字典env。 |
| spawn()族 | ||
| spawnv(mode, path, args) | 通用 | 在新进程中执行程序,args是参数列表或元组,args的第一个元素应是程序的名称,mode可取:P_WAIT, P_NOWAIT, P_NOWAITO, P_OVERLAY, P_DETACH。 |
| spawnve(mode, path, args, env) | 通用 | 功能同上,带环境字典env。 |
| spawnl(mode, path, arg1, ..., argn) | 通用 | 等价于spawnv(mode, path, (arg1, ..., argn)) |
| spawnle(mode, path, arg1, ..., argn, env) | 通用 | 等价于spawnve(mode, path, (arg1, ..., argn), env) |
| spawnvp(mode, file, args) | 通用 | 功能同基础的spawnv()函数,但在搜索可执行文件的过程中,会使用PATH环境间变量的设置查找文件(从enviro['PATH']获得)。 |
| spawnvpe(mode, file, args) | 通用 | 功能同上,带环境字典env。 |
| spawnlp(mode, file, arg1, ..., argn) | 通用 | 等价于spawnvp(mode, file, (arg1, ..., argn)) |
| spawnlpe() | 通用 | 等价于spawnvpe(mode, file, (arg1, ..., argn), env) |
| wait()族 | ||
| wait([pid]) | Linux | 等待一个子进程完成并返回包含其进程ID和退出状态的元组。pid参数指定了要等待的子进程,如果省略这个参数,当任意子进程退出时,wait()函数就会返回。 |
| waitpid(pid, options) | Linux | 等待进程ID为pid的子进程的状态出现变化,并返回包含其进程ID和退出状态的元组。options对于常规操作应为0或WNOHANG,以避免当没有子进程时出现挂起。此函数还可以用于收集只为某些原因而停止执行的子进程的相关信息,更多详情可参见Python手册。 |
| wait3([options]) | Linux | 同waitpid()函数,但此函数将等待所有子进程中的变化,option参数同waitpid()。返回元组 (pid status, rusage),其中pid时子进程ID, status是退出状态码,rusage包含资源使用信息。 |
| wait4(pid, options) | Linux | 同waitpid()函数,但返回的元组与wait3()返回的相同。 |
| 以下函数使用waitpid()、wait3()、wait4()返回的进程状态代码作为参数,用于检查进程的状态。 | ||
| WCOREDUMP(status) | Linux | 如果进程dumpcore,则返回True。 |
| WIFEXITED(status) | Linux | 如果进程使用exit()系统调用退出,则返回True。 |
| WEXITSTATUS(status) | Linux | 如果WIFEXITED()返回True,则用此函数看返回状态参数。 |
| WIFCONTINUED(status) | Linux | 如果进程已经从任务控制停止中恢复,则返回True。 |
| WIFSIGNALED(status) | Linux | 如果进程由于信号而退出,则返回True。 |
| WIFSTOPPED(status) | Linux | 如果进程已经停止,则返回True。 |
| WSTOPSIG(status) | Linux | 返回导致进程停止的信号。 |
| WTERMSIG(status) | Linux | 返回导致进程退出的信号。 |
● 系统配置
以下函数用于获得系统配置信息
| 函数 | 平台 | 说明 |
|---|---|---|
| confstr(name) | Linux | 返回字符串类型的系统配置变量,此函数返回的参数大多为主机上的编译环境。详情可查看Python手册。 |
| sysconf(name) | Linux | 返回一个整数值的系统配置变量。详情可查看Python手册。 |
| getloadavg() | Linux | 返回一个3元素的元组,包含过去1分钟、5分钟、15分钟内系统运行队列中的平均项数。 |
| urandom(n) | 通用 | 返回一个由系统生成的n个随机字节的字符串,返回的字节适合用于加密。 |
● 文件操作低级接口
下列这些函数中,都是以文件描述符的形式来操作文件的。
| 函数 | 平台 | 说明 |
|---|---|---|
| 文件打开与关闭 | ||
| open(file, flags, mode=0o777) | 通用 | 打开file文件,返回该文件打开后的文件描述符。flags和mode参数的可用值 详见下述 |
| fdopen(file [,mode [,bufsize]]) | 通用 | 创建连接到文件文件描述符fd的已打开文件对象,mode和bufsize含义同内置函数open()。 |
| close(fd) | 通用 | 关闭由open()或pipe()函数返回的文件描述符fd。 |
| closerange(low, high) | 通用 | 关闭范围在low <= fd < high内的所有文件描述符fd,忽略错误。 |
| dup(fd) | 通用 | 复制文件描述符fd,返回一个新的文件描述符。新旧文件描述符可交换使用,且共享状态。 |
| dup2(oldfd, newfd) | 通用 | 将文件描述符oldfd复制给newfd,如果newfd已经对应一个有效的文件描述符,那么它先将被关闭 |
| 文件读写相关操作 | ||
| lseek(fd, pos, how) | 通用 | 将文件位置设为pos,how可取值为:os.SEEK_SET、os.SEEK_CUR、os.SEEK_END,在旧式Python中,它们分别对应于0、1、2。 |
| read(fd, n) | 通用 | 从文件描述符fd读取最多n个字节,以字符串形式返回读出内容。 |
| write(fd, byteobj) | 通用 | 将字节对象byteobj写入文件fd,并返回实际写入的字节数。 |
| ftruncate(fd, length) | Linux | 截取对应文件描述符fd的文件,从而让该文件大小最大不超过length个字节。 |
| fdatasync(fd) | Linux | 强制将所有缓存数据写入fd,以便将这些数据保存到磁盘上(并不真正写入磁盘)。 |
| fsync(fd) | 通用 | 强制将fd中已经写入的数据写入磁盘。 |
| 文件信息和权限操作 | ||
| fstat(fd) | 通用 | 返回文件状态,返回值与os.stat()相同。 |
| fstatvfs(fd) | Linux | 返回文件系统的相关信息,返回值与os.statvfs()相同。 |
| fchmod(fd, mode) | Linux | 将文件模式权限模式修改为mode。 |
| fchown(fd, uid, gid) | Linux | 将与fd相关的文件所有者和组的ID改为uid和gid,-1为保持不变。 |
| fpathconf(fd, name) | Linux | 返回已打开文件的可配置路径名称变量,name指定要获取值的名称,详情可查看Python手册,并非所有名称都可在所有平台上使用。 |
| 终端相关 | ||
| isatty() | Linux | 如果fd关联到一个TTY类型的设备(如终端),则返回True。 |
| ttyname() | Linux | 返回一个说明文件描述符fd相关联的终端设备,若fd没有与终端设备相关联,则引发OSError异常。 |
| openpty() | Linux | 打开一台伪终端并返回PTY和TTY的一堆文件描述(master, slave),并非所有UNIX版本都支持。 |
| tcgetpgrp(fd) | Linux | 返回与fd指定的终端相关联的进程组。 |
| tcsetpgrp(fd, pg) | Linux | 设置与fd指定的终端相关联的进程组。 |
| 管道操作 | ||
| pipe() | Linux | 创建一个管道,用于进程间“单向”通信。返回一对文件描述符(r, w),分别用于读取和写入。此函数通常在执行fork()前调用,之后发送进程将管道的读取端关闭,接收进程将管道的写入端关闭。后可分别使用read()和write() |
● open(file, flags, mode=0o777)
说明:
flag参数可以是以下常量值按位OR,详见下表。mode参数为文件权限的八进制表示。
| 值 | 描述 |
|---|---|
| os.O_RDONLY | 以读方式打开 |
| os.O_WRONLY | 以写方式打开 |
| os.O_RDWR | 以读写方式打开(从头更新) |
| os.O_APPEND | 将内容附加到文件尾 |
| os.O_CREAT | 如果文件不存在则创建它 |
| os.O_NONBLOCK | 非阻塞打开(Linux) |
| os.O_NDELAY | 同os.O_NONBLOCK(Linux) |
| os.O_DSYNC | 同步写入(Linux) |
| os.O_NOCTTY | 打开一个设备时,不设置终端(Linux) |
| os.O_TRUNC | 若文件存在,则将它长度截为0 |
| os.O_RSYNC | 同步读取(Linux) |
| os.O_SYNC | 同步写入(Linux) |
| os.O_EXCL | 如果设了O_CREAT参数且文件已存在,则报错 |
| os.O_EXLOCK | 在文件上设置一个排他锁 |
| os.O_SHLOCK | 在文件上设置一个共享锁 |
| os.O_ASYNC | 启用异步输入模式 |
| os.O_DIRECT | 使用直接I/O模式,直接操作磁盘 |
| os.O_DIRECTORY | 如果文件不是一个目录,则引发异常 |
| os.O_NOFOLLOW | 不获取符号链接 |
| os.O_NOATIME | 不更新文件的最后访问时间 |
| os.O_TEXT | 文本模式(Windows) |
| os.O_BINARY | 二进制模式(Windows) |
| os.O_NOINHERIT | 子进程不继承文件(Windows) |
| os.O_SHORT_LIVED | 短期保存文件的系统提示(Windows) |
| os.O_TEMPORARY | 关闭时删除文件(Windows) |
| os.O_RANDOM | 随机保存文件的系统提示(Windows) |
| os.O_SEQUENTIAL | 按序访问文件的系统提示(Windows) |
● 文件与目录管理
下列变量为与路径名称构造相关的信息
| 变量 | 说明 |
|---|---|
| sep | 操作系统用于分隔路径各个部分的字符,在Linux上为'/',在Windows上为'\',在Mac上为':' |
| altsep | 操作系统用于分隔路径各个部分的另一种字符,若只存在一种分隔字符,则本变量为None |
| curdir | 用于引用当前目录的字符串,在Linux和Windows上为'.',在Mac上为':' |
| pardir | 用于引用父目录的字符串,在Linux和Windows上为'..',在Mac上为'::' |
| extsep | 用于将基本文件与其扩展名分离的字符,在Linux和Windows上为'.' |
| pathsep | 用于分隔各个搜索路径的字符(如包含在环境变量$PATH中的分隔各个不同路径的字符),在Linux上为':',在Windows上为';' |
| devnull | 空设备的路径,在Linux上为'/dev/null' |
下列函数用于操作文件系统上的文件和目录。
| 函数 | 平台 | 说明 |
|---|---|---|
| 常规目录与文件操作 | ||
| listdir(path) | 通用 | 返回包含目录路径中各文件名和子目录名的列表(不包括'.'和'..'),不递归搜索。 |
| mkdir(path [,mode]) | 通用 | 创建模式为mode的目录,默认模式为777。 |
| makedirs(path [,mode]) | 通用 | 在创建目录时,会同时创建包含叶子目录所需要的中间级目录,若叶子目录已存在或者无法创建,将引发OSError异常。 |
| rmdir(path) | 通用 | 删除目录,目录必须为空。 |
| removedirs(path) | 通用 | 递归地目录删除函数,即在path描述链上的所有目录都将被删除。若其中某个目录不为空,则停止继续向上删除目录。 |
| remove(path) | 通用 | 删除文件,同unlink()函数。 |
| unlink(path) | 通用 | 删除文件,同remove()函数 |
| rename(src, dst) | 通用 | 将文件或目录src重命名为dst |
| renames(old, new) | 通用 | 它会尝试创建新路径所需的中间目录,重命名完成之后,将使用removedirs()删除旧名称的目录链。 |
| walk(top ,topdown=True ,onerror=None ,followlinks=False) | 通用 | 创建一个生成器对象来遍历整棵目录树。top指定目录的顶级;topdown为遍历方向,True为由上而下(默认值),False为由下而上。 返回的生成器每次生成一个元组:(dirpath, dirnames, filename),dirpath为目录名字符串,dirnames为其中所有子目录的目录名列表,filename为其中所有文件的文件名列表。 默认followlinks为Flase表示不获取符号链接。 |
| 文件属性操作 | ||
| access(path, accessmode) | 通用 | 检查此进程访问文件path的:读/写/执行权限,accessmode的可取值为:os.R_OK, os.W_OK, os.X_OK, os.F_OK(文件是否存在),若有此权限则返回True。 |
| stat(path) | 通用 | 查看path的相关信息,返回的各个信息在一个对象中,包括:st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime, st_ctime。 |
| chmod(path, mode) | 通用 | 修改path的权限模式为mode。 |
| chown(path, uid, gid) | Linux | 将path的拥有者和组改为uid和gid,-1表示不变。 |
| chflags(path, flags) | Linux | 修改path上的文件标志,flags为若干常量的按位OR,详情可查阅Python文档。 |
| utime(path, (atime, mtime)) | 通用 | 将文件的访问时间和修改时间分别设为atime和mtime,时间用time.time()返回的数字来指定。 |
| pathconf(path, name) | Linux | 返回与path相关的可配置系统参数(各个不同操作系统并非所有name都支持),同fpathconf()函数。 |
| 查看整个文件系统 | ||
| statvfs(path) | Linux | 获取path指定路径所在文件系统的整个文件系统信息,包括f_bsiez, f_bloks, f_files, f_namemax等等。 |
| 链接文件操作相关 | ||
| link(src, dst) | Linux | 创建指向src的名为dst的硬链接文件。 |
| symlink(src, dst) | Linux | 创建指向src的名为dst的符号链接文件。 |
| readlink(path) | Linux | 返回一个字符串,代表符号链接path指向的路径。 |
| lchflags(path, flags) | Linux | 同chflags()函数,但不追踪符号链接。 |
| lchmod(path, mode) | 通用 | 同chmod()函数,但不追踪符号链接。 |
| lchown(path, uid, gid) | Linux | 同chown()函数,但不追踪符号链接。 |
| lstat(path) | Linux | 同stat()函数,但不追踪符号链接。 |
| 设备操作相关 | ||
| makedev(major, minor) | Linux | 给定主要和次要设备编号,创建原始设备编号。 |
| major(devicenum) | Linux | 返回由os.makedev()创建的原始设备号的主要设备编号号。 |
| minor(devicenum) | Linux | 返回由os.makedev()创建的原始设备号的次要设备编号。 |
| mknod(path, mode=0o666, device=0) | Linux | 创建设备特殊文件。device为用os.makedev()创建的原始设备编号。 |
| 命名管道 | ||
| mkfifo(path, mode=0o666) | Linux | 创建权限模式为mode的FIFO(命名管道)。 |
● os.path模块
os.path模块以一种可移植的方式操作路径名称,可由os模块导入。
| 函数 | 说明 |
|---|---|
| 文件与目录的路径操作 | |
| exists(path) | 如果path指定的文件或目录存在,则返回True。若path是已损坏的符号链接,则返回False。 |
| lexists(path) | 功能同上,但只要链接文件存在,即便链接损坏也返回True。 |
| isdir(path) | 如果path是目录则返回True。 |
| isfile(path) | 如果path是文件则返回True。 |
| islink(path) | 如果path是符号链接则返回True。 |
| ismount(path) | 如果path是挂载点则返回True。 |
| 文件与目录的属性操作 | |
| getsize(path) | 返回path的大小,以字节为单位 |
| getatime(path) | 返回最后一次访问path的时间,返回值是从纪元起始点开始的秒数。 |
| getctime(path) | 返回创建path的时间(Windows)或最后一次修改path的时间(Linux),返回值是从纪元起始点开始的秒数。 |
| getmtime(path) | 返回最后一次修改path的时间,返回值是从纪元起始点开始的秒数。 |
| samefile(path1, path2) | 如果path1和path2引用同一个文件或目录,返回True。 |
| sameopenfile(fp1, fp2) | 如果打开的文件对象fp1和fp2引用同一个文件,则返回True。 |
| samestat(stat1, stat2) | 如果fstat()、lstat()或stat()饭hi的stat对象stat1和stat2引用同一个文件,则返回True。 |
| 以下为纯路径字符串操作(不管实际目录或文件是否存在) | |
| dirname(path) | 返回path所在目录的名称。 |
| basename(path) | 返回path的基本名称(即不含父目录及以上路径)。 |
| abspath(path) | 返回path的绝对路径。 |
| isabs(path) | 如果path是绝对路径名称,则返回True。 |
| normpath(path) | 返回标准化路径名称。它将折叠多余分隔符,在Windows上,它把正斜杠转换为反斜杠。 |
| normcase(path) | 返回标准化路径名称并转换大小写,在不区分大小写的文件系统上,它把路径全转为小写字母,在Windows上,它把正斜杠转换为反斜杠。 |
| join(path1 [,path2 [, ...]]) | 将一个或多个路径组件智能连接为一个路径名称,例如:join('home', 'a', 'b')返回为 '/home/a/b' |
| split(path) | 将path拆分为 (head, tail) 元组,tail为路径基本名称,head是tail之前的内容。相当于 (dirname(), basename())。 |
| splitdrive(path) | 将path拆分为 (driver, filename) 元组。在Windows上,drive是驱动器名,在Linux上,drive为空字符串。 |
| splitext(path) | 将path拆分为主文件名和后缀(扩展名),如 splittext('a.txt') 的返回值为 ('a', '.txt') |
| realpath(path) | 返回path的真实路径,并除去路径中的所有符号链接(Linux) |
| relpath(path [,start]) | 返回从当前工作目录到path的一条相对路径,可以提供start参数来指定另一个起始目录。 |
| commonpath(list) | 返回list中各个元素前缀路径相同的部分,如:os.path.commonpath(['/usr/lib', '/usr/local/lib']),返回:'/usr' |
| commonprefix(list) | 返回list中各个元素前缀相同的部分,如:os.path.commonpath(['/usr/lib', '/usr/local/lib']),返回:'/usr/l' |
| expanduser(path) | 将path中的用户主目录'~'替换成当前用户主目录的绝对路径名称。 |
| expandvars(path) | 将path中的'$name'或'${name}'替换成相应环境变量中的值。 |
| 其他 | |
| supports_unicode_filenames | 变量,如果文件系统支持Unicode文件名,那么此变量为True。(一般Windows为True,Linux为False) |
(3)与Windows相关模块
● configparser模块
configparser模块用于读取Windows的.ini格式配置文件。详细使用可查阅Python手册。
● winreg模块
winreg模块提供了Windows注册表的底层接口。详细使用可查阅Python手册。
● msvcrt
msvcrt模块提供在Windows上对MicroSoft Visual C中的一些函数的访问。详细使用可查阅Python手册。
(4)subprocess模块
subprocess模块包含的函数和对象用于泛化创建新进程的任务、控制输入与输出流。
● subprocess模块常用函数与变量
| 函数与变量 | 说明 |
|---|---|
| subprocess模块的函数 | |
| Popen(args, **parms) | 以子进程形式执行一个新命令,然后返回代表新进程的Popen对象。详情可查看Python手册。 |
| call(args, **parms) | 与Popen()完全相同,但它只返回状态码,不返回Popen对象。 |
| check_call(args, **parms) | 同call()函数,但如果退出代码为非0值,将引发CalledProcessError异常。 |
| Popen对象的方法 | |
| p.communicate([input]) | 通过将input中提供的数据发送给进程的标准输入,与子进程进行通信。数据一旦法宠,就会等待进程终止,返回值是一个元组 (stdout, stderr)。 |
| p.kill() | 终止子进程。在Linux上是发送给子进程一个SIGKILL信号,在Windows上是调用p.terminate()方法。 |
| p.poll() | 检查p是否已经终止,是则返回子进程的返回代码,否则返回None。 |
| p.send_signal(signal) | 发送一个信号给子进程,signal是singal模块中定义的信号编号。在Windows上,唯一支持的信号是SIGTERM。 |
| p.terminate() | 终止子进程。在Linux上是发送给子进程一个SIGTERM信号,在Windows上是调用win32 API的TerminateProcess()函数。 |
| p.wait() | 等待p终止,然后返回返回代码。 |
| Popen对象的属性 | |
| p.pid | 子进程的ID。 |
| p.returncode | 进程的数字返回代码,如果为None,则表示进程尚未终止,如果为负值,表示进程已被一个信号终止。 |
| p.stdin, p.stdout, p.stderr | 当以管道形式打开相应的I/O流时,这三个属性将被设置为打开的文件对象。 |
例:创建2个子进程,然后通过一条管道将它们链接在一起
p1 = subprocess.Popen("ls -l', shell=True, stdout=subprocess.PIPE)
p2 = subprocess.Popen("wc", shell=True, stdin=p1.stdout, stdout=subprocess.PIPE)
out = p2.stdout.read()
(5)signal模块
信号通常应对异步事件,包括:定时器到期、有输入数据达到、用户执行操作等。signal模块的信号接口基本仿UNIX,在Windows下只支持其中的一小部分。
| 函数 | 平台 | 说明 |
|---|---|---|
| pause() | Linux | 进入睡眠状态,直到收到下一个信号为止。 |
| signal(siginalnum, handler) | 通用 | 将信号singalnum的信号处理器函数设置为handler。handler必须为接收2个参数(信号编号和帧对象)的Python可调用对象。将handler指定为SIG_IGN或SIG_DFL分别代表忽略信号和使用默认信号处理器。返回值时以前设置的信号处理器。启用线程时,只能用主线程调用此函数,否则将引发ValueError异常。signalnum可用信号见下表。 |
| getsignal(signalnum) | 通用 | 返回signalnum的信号处理器,返回对象是Python的可调用对象。若为忽略信号则返回SIG_IGN,若为默认处理器则返回SIG_DFL,如果没有设置处理器函数,则返回None。 |
| alarm(time) | Linux | 如果time非0,就会在time秒内将SIGALARM信号发送给程序;如果time为0,则不安排任何警报消息。不管time是否为0,以前安排的任何警报都会取消,返回值为以前安排的所有警报之前所余的秒数,如没有则返回0。 |
| setitimer(which, seconds [,interval]) | 通用 | 将内部定时器设在seconds秒之后生成一个信号,并在此之后每interval秒重复法宠信号,这两个参数均为浮点数。which决定生成什么信号,可选值为:ITIMER_REAL(生成SIGALRM信号)、ITIMER_VERTUAL(生成SIGVTALRM信号)、ITIMER_PROF(生成SIGPROF信号)。将seconds设为0将清除定时器。本函数返回值为元组表示的以前设置的定时器:(seconds, interval) |
| gettimer(which) | 通用 | 返回由which表示的内部定时器的当前值。 |
| siginterrupt(signalnum, flag) | 通用 | 为给定信号设置系统调用的重启行为,若flags为False,则被signalnum中断的系统调用将自动重新启动;若flags为Ture,将中断系统调用。被中断的系统调用通常会引发OSError或IOError异常。 |
| set_wakeup_fd(fd) | 通用 | 当接收到信号时,会向文件描述符fd的文件中写入一个'\0'字节。通常给select模块中的轮询函数使用,必须以非阻塞模式打开fd文件,此函数才有效。 |
● 常用信号
使用SIG*格式的符号可以描述各种信号,浙西名称对应于特定的整数值,常用信号如下表所示:
| 信号名称 | 描述 | 信号名称 | 描述 |
|---|---|---|---|
| SIGABRT | 异常终止 | SIGPWR | 电源故障 |
| SIGALRM | 警报 | SIGQUIT | 终端退出字符 |
| SIGBUS | 总线错误 | SIGSEGV | 段错误 |
| SIGCHLD | 子状态中的变化 | SIGSTOP | 停止 |
| SIGCLD | 子状态中的变化 | SIGTERM | 终止 |
| SIGCONT | 继续 | SIGTRAP | 硬件故障 |
| SIGFPE | 浮点错误 | SIGTSTP | 终端停止字符 |
| SIGHUP | 挂起 | SIGTTIN | 控制TTY |
| SIGILL | 非法指令 | SIGTTOU | 控制TTY |
| SIGINT | 终端中断字符 | SIGURG | 紧急情况 |
| SIGIO | 异步I/O | SIGUSR1 | 用户定义1 |
| SIGIOT | 硬件错误 | SIGUSR2 | 用户定义2 |
| SIGKILL | 终止 | SIGVTALRM | 虚拟时间警报 |
| SIGPIPE | 写入管道而非读取器 | SIGWINCH | Window大小变化 |
| SIGPOLL | 可轮询的事件 | SIGXCPU | 超出CPU限制 |
| SIPROF | 配置警报 | SIGXFSZ | 超出文件大小限制 |
以下示例如何在异步操作时使用singal模块发信号:
import signal, socket
# 信号处理器函数,若本进程在挂起时,收到指定的信号,本进程会恢复运行并强制跳转到这里执行handler()函数。
def handler(signum, frame):
print('Timeout!')
raise IOError 'Host not responding'
sock = socket.socket(socket.AF_INET, socket,SOCK_STREAM)
signal.signal(signal.SIGALRM, handler) # 设置信号处理器函数,若本进程收到SIGALRM信号,则本进程自动调用handler函数。
signal.alarm(5) # 安排5秒后给自己发一个SIGALRM信号
sock.connect('www.python.org', 80) # connect()操作一般为异步操作:即在等待对方主机响应的时候,本进程会挂起,就像卡在这条语句一样
signal.alarm(0) # 若connect()正常返回,则清除刚才用singal.alarm()设置的警报信号,5秒后不会再给自己发SIGALRM信号。

浙公网安备 33010602011771号