文章内容如有错误或排版问题,请提交反馈,非常感谢!
OS:操作系统接口
os模块是Python标准库中的一个核心模块,提供了与操作系统进行交互的功能。它允许Python程序执行操作系统级别的任务,例如文件和目录操作、环境变量管理、进程管理等。os模块的功能因操作系统而异,但它为跨平台编程提供了统一的接口。os模块提供了与操作系统交互的强大功能,是进行系统级编程和文件操作的重要工具。它帮助开发者实现跨平台兼容的应用程序,并处理各种操作系统级别的任务。

主要功能
- 文件和目录操作:创建、删除、重命名、移动文件和目录。
- 路径操作:处理路径名和文件名。
- 环境变量:访问和修改环境变量。
- 进程管理:创建和管理进程,执行系统命令。
- 权限和所有权:管理文件和目录的权限和所有权。
注意事项
- 平台差异:某些os模块功能在不同的操作系统上可能有所不同。例如,system在Windows和Unix系统上表现不同。
- 权限问题:更改文件权限和所有权可能需要管理员权限,特别是在受限环境下。
- 安全性:在执行系统命令时,请注意输入数据的安全性,以防止命令注入攻击。
文件和目录操作
- mkdir(path, mode=0o777):创建目录。path:要创建的目录路径。mode:可选参数,指定目录的权限。默认为0o777(即所有权限)。
- rmdir(path):删除空目录。path:要删除的目录路径。
- remove(path):删除文件。path:要删除的文件路径。
- rename(src, dst):重命名文件或目录。src:原路径。dst:新路径。
- path.join(*paths):将多个路径组合成一个路径。*paths:要组合的路径。
示例:
import os
os.mkdir('new_directory')
os.rmdir('new_directory')
os.remove('file_to_delete.txt')
os.rename('old_name.txt', 'new_name.txt')
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path) #输出:folder/subfolder/file.txt
路径操作
- path.abspath(path):返回路径的绝对路径。path:要转换的路径。
- path.exists(path):功能:检查路径是否存在。path:要检查的路径。如果路径存在,则返回True;否则返回False。
- path.isfile(path):检查路径是否是文件。path:要检查的路径。如果路径是文件,则返回True;否则返回False。
- path.isdir(path):检查路径是否是目录。要检查的路径。如果路径是目录,则返回True;否则返回False。
示例:
import os
abs_path = os.path.abspath('file.txt')
exists = os.path.exists('file.txt')
print(exists)
is_file = os.path.isfile('file.txt')
print(is_file)
is_dir = os.path.isdir('directory')
print(is_dir)
环境变量
- getenv(key, default=None):获取环境变量的值。key:环境变量的名称。default:可选参数,如果环境变量不存在,则返回默认值。
- putenv(key, value):设置环境变量的值。key:环境变量的名称。value:环境变量的值。在某些平台上,os.putenv不一定能持久化环境变量的更改。
示例:
import os
home_dir = os.getenv('HOME')
print(home_dir)
os.putenv('MY_ENV_VAR', 'value')
进程管理
- system(command):执行系统命令。command:要执行的命令。
- execvp(program, arguments):替换当前进程映像为新程序。program:要执行的程序名称。arguments:要传递给程序的参数列表。此函数不返回,成功执行后当前进程映像将被替换。
- getpid():获取当前进程的进程ID。
- kill(pid, sig):向指定的进程发送信号。pid:要发送信号的进程ID。sig:要发送的信号。
示例:
import os
os.system('echo Hello World')
os.execvp('ls', ['ls', '-l'])
pid = os.getpid()
print(pid)
import signal
os.kill(os.getpid(), signal.SIGTERM) #向当前进程发送终止信号
权限和所有权
- chmod(path, mode):更改文件或目录的权限。path:文件或目录的路径。mode:新的权限模式(如0o777)。
- chown(path, uid, gid):更改文件或目录的所有权。path:文件或目录的路径。uid:新的用户ID。gid:新的组ID。
示例:
import os
os.chmod('file.txt', 0o755)
os.chown('file.txt', 1000, 1000) #将文件的所有权更改为指定的用户和组
errno:标准errno系统符号
errno模块是Python标准库中的一个模块,提供了一组用于处理操作系统错误代码的常量。这些错误代码通常用于表示系统调用或库函数执行时的错误类型。在Python中,errno模块主要用于与底层系统调用和文件操作相关的错误处理。errno模块是一个重要的工具,用于处理与系统调用和文件操作相关的错误。它提供了一个标准的方式来识别和处理这些错误,使得错误处理更加一致和可靠。
使用场景
- 错误处理:在处理文件操作、系统调用或与操作系统交互时,使用errno模块来识别和处理错误条件。
- 调试:在调试程序时,根据errno常量来诊断错误原因。
- 兼容性:编写与底层系统调用和文件操作兼容的跨平台代码。
注意事项
- 平台差异:不同的操作系统可能有不同的错误代码和错误含义。errno常量在不同平台上可能有所不同,但Python通过标准化错误代码来提供一致的接口。
- 异常处理:在异常处理时,通常可以通过捕获OSError并检查其errno属性来处理错误。
主要常量
errno模块中的常量是系统级错误代码的符号名称,通常是整数值,用于表示特定的错误条件。以下是一些常用的错误代码常量:
| 错误码 | 功能 | 值 | errno.ENOENT | “No such file or directory”(没有这样的文件或目录) | 2 |
| errno.EACCES | “Permission denied”(权限被拒绝) | 13 |
| errno.EEXIST | “File exists”(文件已存在) | 17 |
| errno.EINVAL | “Invalid argument”(无效的参数) | 22 |
| errno.ENOSPC | “No space left on device”(设备上没有剩余空间) | 28 |
| errno.EIO | “Input/output error”(输入/输出错误) | 5 |
| errno.ETIMEDOUT | “Connection timed out”(连接超时) | 110 |
以下是一些示例,演示如何在Python程序中使用errno模块来处理不同的错误情况。
示例1: 使用errno处理文件操作错误
import errno
import os
try:
# 尝试打开一个不存在的文件
with open('non_existent_file.txt', 'r') as file:
content = file.read()
except OSError as e:
if e.errno == errno.ENOENT:
print("Error: The file does not exist.")
elif e.errno == errno.EACCES:
print("Error: Permission denied.")
else:
print("Error: An unexpected error occurred.")
示例2: 使用errno在自定义异常中
import errno
class CustomFileError(Exception):
def __init__(self, errno_code):
self.errno_code = errno_code
super().__init__(self._get_error_message())
def _get_error_message(self):
if self.errno_code == errno.EACCES:
return "Permission denied."
elif self.errno_code == errno.ENOENT:
return "File not found."
else:
return "An unknown error occurred."
try:
# 触发一个自定义异常
raise CustomFileError(errno.EACCES)
except CustomFileError as e:
print(f"CustomFileError: {e}")



