如何操作系统命令和文件(os模块)

Python 的 os 模块提供了丰富的操作系统功能,可以用于与操作系统交互。它包括文件和目录操作、进程管理、环境变量处理等。

1. 导入 os 模块

在使用 os 模块之前,首先需要导入它:

import os

2. 文件与目录操作

2.1 获取当前工作目录

可以使用 os.getcwd() 获取当前的工作目录:

current_directory = os.getcwd()
print(f"当前工作目录: {current_directory}")
2.2 改变工作目录

使用 os.chdir(path) 可以更改当前工作目录:

os.chdir('/path/to/directory')
print(f"工作目录已更改为: {os.getcwd()}")
2.3 创建目录

os.makedirs(path) 可以递归地创建目录,即使中间的目录不存在也会一同创建:

os.makedirs('test_dir/sub_dir')

如果只想创建单个目录,可以使用 os.mkdir(path)

os.mkdir('single_dir')
2.4 删除目录

使用 os.rmdir(path) 删除单个空目录:

os.rmdir('single_dir')

如果想递归删除非空目录,使用 os.removedirs(path)

os.removedirs('test_dir/sub_dir')

注意:os.removedirs 会删除路径中所有空的父目录。

2.5 文件操作
2.5.1 创建文件

使用 open 函数可以创建文件:

with open('test_file.txt', 'w') as file:
    file.write('Hello, World!')
2.5.2 删除文件

使用 os.remove(path) 可以删除文件:

os.remove('test_file.txt')
2.5.3 重命名文件或目录

使用 os.rename(src, dst) 可以重命名文件或目录:

os.rename('old_name.txt', 'new_name.txt')
2.5.4 获取文件或目录的状态

os.stat(path) 返回文件或目录的状态信息,如文件大小、创建时间等:

file_stat = os.stat('new_name.txt')
print(f"文件大小: {file_stat.st_size} bytes")
2.6 列出目录内容

使用 os.listdir(path) 可以列出目录下的所有文件和子目录:

files_and_dirs = os.listdir('.')
print(files_and_dirs)

如果需要递归列出所有文件,可以使用 os.walk

for root, dirs, files in os.walk('.'):
    print(f"当前目录: {root}")
    print(f"子目录: {dirs}")
    print(f"文件: {files}")

3. 环境变量

3.1 获取环境变量

使用 os.getenv('VARIABLE_NAME') 获取环境变量的值:

path = os.getenv('PATH')
print(f"系统PATH变量: {path}")
3.2 设置环境变量

可以使用 os.environ['VARIABLE_NAME'] = 'value' 设置环境变量:

os.environ['MY_VARIABLE'] = 'my_value'
print(f"自定义环境变量: {os.getenv('MY_VARIABLE')}")
3.3 删除环境变量

使用 os.environ.pop('VARIABLE_NAME') 删除环境变量:

os.environ.pop('MY_VARIABLE')

4. 进程管理

4.1 执行系统命令

使用 os.system(command) 可以在 Python 中执行系统命令:

os.system('ls -l')

这个函数执行完命令后,会返回命令的退出状态码。注意:os.system 执行命令时会在子进程中运行,因此它不能直接获取命令的输出。

4.2 使用 os.popen 处理命令输出

os.popen(command) 可用于执行命令并获取其输出:

output = os.popen('ls -l').read()
print(output)
4.3 获取当前进程的 ID

使用 os.getpid() 可以获取当前进程的 ID:

pid = os.getpid()
print(f"当前进程 ID: {pid}")
4.4 获取父进程 ID

使用 os.getppid() 可以获取父进程的 ID:

ppid = os.getppid()
print(f"父进程 ID: {ppid}")
4.5 创建子进程

使用 os.fork() 可以创建一个子进程(仅在 UNIX 系统上可用):

pid = os.fork()
if pid == 0:
    print("这是子进程")
else:
    print(f"这是父进程,子进程 ID: {pid}")
4.6 进程终止

使用 os.kill(pid, signal) 可以向进程发送信号,如终止进程:

import signal
os.kill(pid, signal.SIGTERM)

5. 文件描述符操作

os 模块还提供了低级别的文件描述符操作,这些操作通常用于更底层的文件处理。

5.1 打开文件

使用 os.open(path, flags) 以指定的标志打开文件,并返回文件描述符:

fd = os.open('test_file.txt', os.O_RDWR | os.O_CREAT)
5.2 读取文件

使用 os.read(fd, n) 从文件描述符中读取 n 个字节:

content = os.read(fd, 100)
print(content)
5.3 写入文件

使用 os.write(fd, str) 向文件描述符写入数据:

os.write(fd, b"Hello, File Descriptor!")
5.4 关闭文件

使用 os.close(fd) 关闭文件描述符:

os.close(fd)
5.5 文件锁

文件锁对于并发访问文件的场景非常重要。可以使用 os.flock(fd, operation) 对文件进行加锁和解锁操作:

import fcntl
fd = os.open('test_file.txt', os.O_RDWR)
fcntl.flock(fd, fcntl.LOCK_EX)
# 文件锁定,可以执行文件操作
fcntl.flock(fd, fcntl.LOCK_UN)
# 解锁
os.close(fd)

6. 其他常用功能

6.1 获取文件或目录的绝对路径

使用 os.path.abspath(path) 可以获取文件或目录的绝对路径:

absolute_path = os.path.abspath('test_file.txt')
print(absolute_path)
6.2 判断路径是否存在

使用 os.path.exists(path) 判断路径是否存在:

exists = os.path.exists('test_file.txt')
print(f"文件存在: {exists}")
6.3 判断路径是否为目录

使用 os.path.isdir(path) 判断路径是否为目录:

is_dir = os.path.isdir('test_dir')
print(f"是否为目录: {is_dir}")
6.4 判断路径是否为文件

使用 os.path.isfile(path) 判断路径是否为文件:

is_file = os.path.isfile('test_file.txt')
print(f"是否为文件: {is_file}")
6.5 获取文件的大小

使用 os.path.getsize(path) 获取文件的大小(以字节为单位):

size = os.path.getsize('test_file.txt')
print(f"文件大小: {size} bytes")
6.6 获取文件的最后修改时间

使用 os.path.getmtime(path) 获取文件的最后修改时间(以时间戳表示):

import time
mod_time = os.path.getmtime('test_file.txt')
print(f"最后修改时间: {time.ctime(mod_time)}")

os 模块为 Python 提供了强大的与操作系统交互的能力,包括文件和目录操作、环境变量处理、进程管理等。在使用 os 模块时,必须注意跨平台兼容性,有些功能可能在不同的操作系统上表现不同。在编写 Python 程序时,充分利用 os 模块可以极大地增强程序的灵活性和功能性。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值