概述
更多详情请查看Honker
Python | 介绍os
模块
os
模块中的工具
>>> import os
>>> dir(os)
['CLD_CONTINUED', 'CLD_DUMPED', 'CLD_EXITED', 'CLD_TRAPPED', 'DirEntry', 'EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER', 'EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', 'EX_USAGE', 'F_LOCK', 'F_OK', 'F_TEST', 'F_TLOCK', 'F_ULOCK', 'MutableMapping', 'NGROUPS_MAX', 'O_ACCMODE', 'O_APPEND', 'O_ASYNC', 'O_CLOEXEC', 'O_CREAT', 'O_DIRECT', 'O_DIRECTORY', 'O_DSYNC', 'O_EXCL', 'O_LARGEFILE', 'O_NDELAY', 'O_NOATIME', 'O_NOCTTY', 'O_NOFOLLOW', 'O_NONBLOCK', 'O_RDONLY', 'O_RDWR', 'O_RSYNC', 'O_SYNC', 'O_TRUNC', 'O_WRONLY', 'POSIX_FADV_DONTNEED', 'POSIX_FADV_NOREUSE', 'POSIX_FADV_NORMAL', 'POSIX_FADV_RANDOM', 'POSIX_FADV_SEQUENTIAL', 'POSIX_FADV_WILLNEED', 'PRIO_PGRP', 'PRIO_PROCESS', 'PRIO_USER', 'P_ALL', 'P_NOWAIT', 'P_NOWAITO', 'P_PGID', 'P_PID', 'P_WAIT', 'PathLike', 'RTLD_DEEPBIND', 'RTLD_GLOBAL', 'RTLD_LAZY', 'RTLD_LOCAL', 'RTLD_NODELETE', 'RTLD_NOLOAD', 'RTLD_NOW', 'R_OK', 'SCHED_BATCH', 'SCHED_FIFO', 'SCHED_IDLE', 'SCHED_OTHER', 'SCHED_RESET_ON_FORK', 'SCHED_RR', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'ST_APPEND', 'ST_MANDLOCK', 'ST_NOATIME', 'ST_NODEV', 'ST_NODIRATIME', 'ST_NOEXEC', 'ST_NOSUID', 'ST_RDONLY', 'ST_RELATIME', 'ST_SYNCHRONOUS', 'ST_WRITE', 'TMP_MAX', 'WCONTINUED', 'WCOREDUMP', 'WEXITED', 'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED', 'WIFSTOPPED', 'WNOHANG', 'WNOWAIT', 'WSTOPPED', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED', 'W_OK', 'XATTR_CREATE', 'XATTR_REPLACE', 'XATTR_SIZE_MAX', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_fspath', '_fwalk', '_get_exports_list', '_putenv', '_spawnvef', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'chown', 'chroot', 'close', 'closerange', 'confstr', 'confstr_names', 'cpu_count', 'ctermid', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'environb', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fchdir', 'fchmod', 'fchown', 'fdatasync', 'fdopen', 'fork', 'forkpty', 'fpathconf', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fstatvfs', 'fsync', 'ftruncate', 'fwalk', 'get_blocking', 'get_exec_path', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getegid', 'getenv', 'getenvb', 'geteuid', 'getgid', 'getgrouplist', 'getgroups', 'getloadavg', 'getlogin', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getpriority', 'getresgid', 'getresuid', 'getsid', 'getuid', 'getxattr', 'initgroups', 'isatty', 'kill', 'killpg', 'lchown', 'linesep', 'link', 'listdir', 'listxattr', 'lockf', 'lseek', 'lstat', 'major', 'makedev', 'makedirs', 'minor', 'mkdir', 'mkfifo', 'mknod', 'name', 'nice', 'open', 'openpty', 'pardir', 'path', 'pathconf', 'pathconf_names', 'pathsep', 'pipe', 'pipe2', 'popen', 'posix_fadvise', 'posix_fallocate', 'pread', 'preadv', 'putenv', 'pwrite', 'pwritev', 'read', 'readlink', 'readv', 'register_at_fork', 'remove', 'removedirs', 'removexattr', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sched_get_priority_max', 'sched_get_priority_min', 'sched_getaffinity', 'sched_getparam', 'sched_getscheduler', 'sched_param', 'sched_rr_get_interval', 'sched_setaffinity', 'sched_setparam', 'sched_setscheduler', 'sched_yield', 'sendfile', 'sep', 'set_blocking', 'set_inheritable', 'setegid', 'seteuid', 'setgid', 'setgroups', 'setpgid', 'setpgrp', 'setpriority', 'setregid', 'setresgid', 'setresuid', 'setreuid', 'setsid', 'setuid', 'setxattr', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'st', 'stat', 'stat_result', 'statvfs', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sync', 'sys', 'sysconf', 'sysconf_names', 'system', 'tcgetpgrp', 'tcsetpgrp', 'terminal_size', 'times', 'times_result', 'truncate', 'ttyname', 'umask', 'uname', 'uname_result', 'unlink', 'unsetenv', 'urandom', 'utime', 'wait', 'wait3', 'wait4', 'waitid', 'waitid_result', 'waitpid', 'walk', 'write', 'writev']
>>> dir(os.path)
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_get_sep', '_joinrealpath', '_varprog', '_varprogb', 'abspath', 'altsep', 'basename', 'commonpath', 'commonprefix', 'curdir', 'defpath', 'devnull', 'dirname', 'exists', 'expanduser', 'expandvars', 'extsep', 'genericpath', 'getatime', 'getctime', 'getmtime', 'getsize', 'isabs', 'isdir', 'isfile', 'islink', 'ismount', 'join', 'lexists', 'normcase', 'normpath', 'os', 'pardir', 'pathsep', 'realpath', 'relpath', 'samefile', 'sameopenfile', 'samestat', 'sep', 'split', 'splitdrive', 'splitext', 'stat', 'supports_unicode_filenames', 'sys']
任务 | 工具 |
---|---|
Shell变量 | os.environ |
运行程序 | os.system , os.popen , os.execv , os.spawnv , os.execlp |
派生进程 | os.fork , os.pipe , os.waitpid , os.kill |
文件描述符,文件锁 | os.open , os.read , os.write |
文件处理 | os.remove , os.rename , os.mkfifo , os.mkdir , os.rmdir , os.stat , os.walk |
管理工具 | os.getcwd , os.chdir , os.chmod , os.getpid , os.listdir , os.access |
移植工具 | os.sep , os.pathsep , os.curdir , os.path.split('path') , os.path.join , os.path.dirname('path') , os.path.basename('path') , os.path.splitext('path') , os.normpath('path') , os.abspath('path') |
路径名工具 | os.path.exists('path') , os.path.isdir('path') , os.path.isfile('path') , os.path.getsize('path') |
管理工具
>>> os.getpid()
4167
>>> os.getcwd()
'/home/alone'
>>> os.chdir('/')
>>> os.getcwd()
'/'
>>> os.chdir('/home/alone')
os.getpid()
: 返回调用函数的进程IDos.getcwd()
: 返回当前的工作目录os.chdir()
: 改变当前的工作目录
可移植的变量
>>> os.pathsep, os.sep, os.pardir, os.curdir, os.linesep
(':', '/', '..', '.', 'n')
os.sep
: 目录组分隔符号os.pathsep
: 在目录列表中分隔目录的字符os.pardir
,os.curdir
: 分别表示父级目录和当前目录os.linesep
: 换行符
常见os.path
工具
>>> os.path.isdir('/home'), os.path.isfile('hello_world.py')
(True, True)
>>> os.path.exists('none.txt')
False
>>> os.path.getsize('/home/alone/hello_world.py')
23
>>> os.path.split('/home/alone/hello_world.py')
('/home/alone', 'hello_world.py')
>>> os.path.join('/home/alone', 'hello_world.py')
'/home/alone/hello_world.py'
>>> name = '/home/alone/hello_world.py'
>>> os.path.dirname(name), os.path.basename(name)
('/home/alone', 'hello_world.py')
>>> os.path.splitext(name)
('/home/alone/hello_world', '.py')
os.path.isdir()
,os.path.isfile()
: 检查文件类型(若目录或文件不存在,则二者都返回False)os.exists()
: 测试文件是否存在os.getsize()
: 获取文件大小os.path.split()
,os.path.join()
: 一个将文件名从他的目录路径中剥离开来,另一个则将他们合并起来os.path.dirname()
,os.path.basename()
: 分别返回os.path.split()
返回结果的前两项os.path.splitext()
: 剥离了文件拓展名
>>> os.sep
'/'
>>> os.path.split(name)
('/home/alone', 'hello_world.py')
>>> name.split(os.sep) # 字符串方法
['', 'home', 'alone', 'hello_world.py']
>>> os.sep.join(name.split(os.sep)) # 字符串方法
'/home/alone/hello_world.py'
>>> os.path.join(*name.split(os.sep))
'home/alone/hello_world.py'
- 使用
str.split
和str.join
几乎可起到与os.sep
相同的作用
>>> mixed = '/home//alone/./hello_world.py'
>>> os.path.normpath(mixed)
'/home/alone/hello_world.py'
>>> os.getcwd()
'/home/alone'
>>> os.path.abspath('') # 空字符串代表当前目录
'/home/alone'
>>> os.path.abspath('文档/linux') # 扩展为当前工作目录下的路径
'/home/alone/文档/linux'
>>> os.path.abspath('.') # 扩展相对路径
'/home/alone'
>>> os.path.abspath('..')
'/home'
>>> os.path.abspath('../../bin')
'/bin'
>>> os.path.abspath('/') # 绝对路径不变
'/'
os.path.abspath()
: 可移植地返回文件的完整目录路径名
在脚本里运行shell命令
os.system()
: 在Python脚本中运行shell命令os.popen()
: 运行shell命令并与其输入和输出流相连接
运行shell命令
>>> os.system('cat hello_world.py')
print('Hello, world!')
0 # 0只是系统调用自身的返回值
>>> os.system('cat helloworld.py')
cat: helloworld.py: 没有那个文件或目录
256 # 通常用0表示成功
与shell命令进行通信
>>> open('hello_world.py').read()
"print('Hello, world!')n"
>>> text = os.popen('hello_world.py').read()
/bin/sh: 1: hello_world.py: not found
>>> text = os.popen('cat hello_world.py').read()
>>> text
"print('Hello, world!')n"
>>> listing = os.popen('ls -alh').read
>>> listing = os.popen('ls -alh').readlines()
>>> listing
['总用量 130Mn', 'drwxr-xr-x 36 alone alone 4.0K 7月 5 14:19 .n', 'drwxr-xr-x 3 root root 4.0K 2月 19 19:01 ..n', 'drwxr-xr-x 2 alone alone 4.0K 5月 16 19:19 公共的n', 'drwxr-xr-x 2 alone alone 4.0K 2月 19 20:58 模板n', 'drwxr-xr-x 2 alone alone 4.0K 6月 7 19:23 视频n', 'drwxr-xr-x 2 alone alone 4.0K 7月 5 12:19 图片n', 'drwxr-xr-x 4 alone alone 4.0K 7月 5 11:33 文档n', 'drwxr-xr-x 3 alone alone 4.0K 7月 6 21:57 下载n', 'drwxr-xr-x 2 alone alone 4.0K 5月 16 19:19 音乐n', '-rw-rw-r-- 1 alone alone 186 7月 5 14:19 优质壁纸图库,持续更新(有标签、大小、分辨率等,便于查找、管理).txtn', 'drwxr-xr-x 2 alone alone 4.0K 7月 6 22:46 桌面n', 'drwxrwxr-x 3 alone alone 4.0K 5月 2 22:05 adobe_flash_playern', 'drwxrwxr-x 3 alone alone 4.0K 2月 20 15:01 .anacondan', 'drwxrwxr-x 23 alone alone 4.0K 2月 20 14:58 anaconda3n', 'drwxrwxr-x 8 alone alone 4.0K 3月 26 15:29 .atomn', '-rw------- 1 alone alone 11K 7月 8 16:48 .bash_historyn', '-rw-r--r-- 1 alone alone 220 2月 19 19:01 .bash_logoutn', '-rw-r--r-- 1 alone alone 4.5K 2月 20 20:31 .bashrcn', '-rw-r--r-- 1 alone alone 3.8K 2月 20 14:58 .bashrc-anaconda3.bakn', 'drwx------ 2 alone alone 4.0K 7月 2 19:29 .bypyn', 'drwxrwxr-x 31 alone alone 4.0K 6月 7 17:49 .cachen', 'drwxrwxr-x 3 alone alone 4.0K 2月 20 20:43 .condan', '-rw-rw-r-- 1 alone alone 40 2月 20 15:02 .condarcn', 'drwx------ 29 alone alone 4.0K 7月 8 16:45 .confign', 'drwxrwxr-x 2 alone alone 4.0K 7月 2 19:26 cron_jobn', '-rwxrwxrwx 1 alone alone 2.1K 7月 4 21:27 download.pyn', 'drwx------ 2 alone alone 4.0K 6月 30 22:33 .gconfn', 'drwx------ 3 alone alone 4.0K 7月 7 20:46 .gnupgn', '-rw-rw-r-- 1 alone alone 23 5月 16 21:17 hello_world.pyn', 'drwxr-xr-x 5 alone alone 4.0K 6月 5 21:57 .ipythonn', 'drwxrwxr-x 3 alone alone 4.0K 6月 8 16:50 Libraryn', 'drwxr-xr-x 5 alone alone 4.0K 2月 19 21:08 .localn', 'drwx------ 5 alone alone 4.0K 2月 19 19:08 .mozillan', '-rwxrwxrwx 3 alone alone 86M 5月 21 19:49 Obsidian-0.12.3.AppImagen', '-rw-r--r-- 1 alone alone 363 5月 16 19:19 .pam_environmentn', '-rwxrwxrwx 1 alone alone 43M 4月 17 11:38 panda5.1.0-x86_64.appimagen', 'drwxrwxr-x 2 alone alone 4.0K 2月 19 19:07 .pandaconfign', 'drwxrwxr-x 2 alone alone 4.0K 2月 20 14:39 .pipn', 'drwx------ 3 alone alone 4.0K 2月 19 19:15 .pkin', '-rw-r--r-- 1 alone alone 807 2月 19 19:01 .profilen', '-rw------- 1 alone alone 7 2月 20 20:35 .python_historyn', 'drwxr-xr-x 5 alone alone 4.0K 6月 19 21:51 snapn', '-rw-rw-r-- 1 alone alone 21 6月 20 22:28 spam.txtn', 'drwx------ 2 alone alone 4.0K 4月 18 11:46 .sshn', 'drwxrwxr-x 5 alone alone 4.0K 6月 7 19:19 .ssrn', '-rw-r--r-- 1 alone alone 0 2月 19 20:54 .sudo_as_admin_successfuln', 'drwxrwxr-x 2 alone alone 4.0K 7月 5 11:21 temporary datan', '-rw------- 1 alone alone 236K 5月 21 22:20 .test.html.swpn', 'lrwxrwxrwx 1 alone alone 13 7月 5 11:33 USB -> /media/alone/n', 'drwxr-xr-x 2 alone alone 4.0K 5月 4 22:20 .vimn', '-rw------- 1 alone alone 16K 7月 5 13:15 .viminfon', '-rw-rw-r-- 1 alone alone 141 2月 19 21:17 .vimrcn', 'drwxrwxr-x 3 alone alone 4.0K 2月 20 14:47 .virtualenvsn', 'drwxrwxr-x 3 alone alone 4.0K 7月 3 21:28 .vscoden', '-rw-rw-r-- 1 alone alone 2.3K 7月 4 21:34 wallhaven_download.pyn', 'drwxr-xr-x 5 alone alone 4.0K 4月 15 12:00 wordpressn']
>>> os.system('python hello_world.py')
Hello, world!
0
>>> output = os.popen('python hello_world.py').read()
>>> output
'Hello, world!n'
替代方案:subprocess
模块
>>> import subprocess
>>> subprocess.call('python hello_world.py', shell=True) # 类似os.system()
Hello, world! # shell=True: 内建shell命令
0
- 这是模拟
os.system()
- 更深入的讨论我们放在后面。现在只需要记住在类Unix环境下运行时,如果依赖程序路径查找等shell功能,那么可能传入
shell=Ture
就行了
>>> pipe = subprocess.Popen('python hello_world.py', shell=True, stdout = subprocess.PIPE)
>>> pipe.communicate()
(b'Hello, world!n', None)
>>> pipe.returncode
0
- 这是模拟
os.popen()
- 我们将
stdout
流与管道连接,然后用communicate()
来运行命令,并接受它的标准输出流和错误流文本;运行完成后,命令的退出状态可作为属性来查看
>>> pipe = subprocess.Popen('python hello_world.py', shell=True, stdout=subprocess.PIPE)
>>> pipe.stdout.read()
b'Hello, world!n'
>>> pipe.wait()
0
- 我们还可以用其他接口直接读取命令的标准输出流,然后等待命令退出(并返回退出状态)
>>> from subprocess import Popen, PIPE
>>> Popen('python hello_world.py', shell=True, stdout=PIPE).communicate()[0]
b'Hello, world!n'
>>>
>>> import os
>>> os.popen('python hello_world.py').read()
'Hello, world!n'
- 实际上,
os.popen()
和subprocess.Popen
存在着直接的映射关系
shell命令的局限
os.system()
和os.popen()
的两大局限
- 可移植程度取决于所运行的命令
- 它们通常在新进程里执行这些命令,会大幅降低程序运行速度
阻塞程序
os.system()
通常会、阻塞程序,直到所启动的命令行程序退出,只需在命令行代码末尾加上shell后台运算符&
即可- 新近的Python版本加入了
os.startfile()
,它会打开一个文件,无论文件的类型是什么,就像用鼠标单击它一样(在相应的应用程序内打开文件) os.popen()
一般不会阻塞,但在管道对象在所启动的程序退出前关闭(如进行垃圾回收时),或是管道一次性完成读取(如用read()
),那么仍然有可能阻塞
os
模块导出的其他工具
os.environ
: 获取和设置shell环境变量os.fork
: 在类Unix系统下派生新的子进程os.pipe
: 负责程序间通信os.execlp
: 启动新程序os.spawnv
: 启动带有底层控制的新程序os.open
: 打开基于底层描述符的文件os.mkdir
: 创建新目录os.mkfifo
: 创建新的命名管道os.stat
: 获取文件底层信息os.remove
: 根据路径名删除文件os.walk
: 将函数或循环应用于整个目录树的各部分
最后
以上就是典雅蜡烛为你收集整理的Python | 介绍os模块Python | 介绍os模块的全部内容,希望文章能够帮你解决Python | 介绍os模块Python | 介绍os模块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复