Python隐藏功能大揭秘 十个系统调用功能你必须知道

开发 前端
今天我们要探索Python中的一些隐藏功能,这些功能可以帮助你更高效地与操作系统进行交互。从简单的文件操作到高级的系统监控,这些功能将让你大开眼界。话不多说,让我们开始吧!

今天我们要探索Python中的一些隐藏功能,这些功能可以帮助你更高效地与操作系统进行交互。从简单的文件操作到高级的系统监控,这些功能将让你大开眼界。话不多说,让我们开始吧!

1.os.system() - 执行外部命令

os.system() 是 Python 中执行外部命令的最简单方法之一。它会等待命令执行完成并返回命令的退出状态码。

import os

# 执行系统命令
result = os.system('echo Hello, World!')
print(f'Command executed with exit status: {result}')

输出结果:

Hello, World!
Command executed with exit status: 0

解释:os.system() 直接调用系统命令行执行指定的命令,并打印命令的输出。

2.subprocess.run() - 更强大的外部命令执行

subprocess.run() 提供了比os.system() 更强大和灵活的外部命令执行功能,可以捕获命令的输出。

import subprocess

# 执行系统命令并捕获输出
result = subprocess.run(['echo', 'Hello, World!'], capture_output=True, text=True)
print(f'Command output: {result.stdout}')
print(f'Command exit status: {result.returncode}')

输出结果:

Command output: Hello, World!
Command exit status: 0

解释:subprocess.run() 返回一个CompletedProcess 实例,包含命令的标准输出、标准错误和退出状态码。

3.os.environ - 访问环境变量

os.environ 是一个字典,用于访问和修改环境变量。

import os

# 访问环境变量
python_path = os.environ.get('PYTHONPATH')
print(f'PYTHONPATH: {python_path}')

# 设置环境变量
os.environ['MY_VAR'] = 'Hello, Python!'
print(f'MY_VAR: {os.environ.get("MY_VAR")}')

输出结果:

PYTHONPATH: (your PYTHONPATH)
MY_VAR: Hello, Python!

解释:通过os.environ 可以方便地访问和修改当前进程的环境变量。

4.os.walk() - 遍历目录树

os.walk() 生成目录树下的所有文件名,通过遍历目录树,可以方便地处理文件和目录。

import os

# 遍历目录树
for root, dirs, files in os.walk('/path/to/directory'):
    print(f'Root: {root}')
    print(f'Directories: {dirs}')
    print(f'Files: {files}')
    print('-' * 40)

输出结果:

Root: /path/to/directory
Directories: ['subdir1', 'subdir2']
Files: ['file1.txt', 'file2.txt']
----------------------------------------
Root: /path/to/directory/subdir1
Directories: []
Files: ['file3.txt']
----------------------------------------
Root: /path/to/directory/subdir2
Directories: []
Files: ['file4.txt']
----------------------------------------

解释:os.walk() 返回一个三元组(root, dirs, files),分别表示当前目录路径、子目录列表和文件列表。

5.shutil.copy() - 文件复制

shutil.copy() 用于复制文件,支持不同文件系统和设备之间的复制。

import shutil

# 复制文件
source_file = '/path/to/source/file.txt'
destination_file = '/path/to/destination/file.txt'
shutil.copy(source_file, destination_file)
print(f'File copied from {source_file} to {destination_file}')

输出结果:

File copied from /path/to/source/file.txt to /path/to/destination/file.txt

解释:shutil.copy() 将源文件复制到目标位置,如果目标文件已存在,会被覆盖。

6.shutil.rmtree() - 递归删除目录

shutil.rmtree() 用于递归删除目录及其内容,类似于 Unix/Linux 的rm -rf 命令。

import shutil

# 递归删除目录
directory_to_remove = '/path/to/directory'
shutil.rmtree(directory_to_remove)
print(f'Directory {directory_to_remove} removed')

输出结果:

Directory /path/to/directory removed

解释:shutil.rmtree() 递归地删除指定目录及其所有子目录和文件。

7.psutil - 获取系统信息

psutil 是一个跨平台库,用于轻松获取系统运行的进程和系统利用率(CPU、内存、磁盘、网络等)信息。

import psutil

# 获取CPU使用率
cpu_usage = psutil.cpu_percent(interval=1)
print(f'CPU Usage: {cpu_usage}%')

# 获取内存使用率
memory_info = psutil.virtual_memory()
print(f'Total Memory: {memory_info.total / (1024 ** 3):.2f} GB')
print(f'Available Memory: {memory_info.available / (1024 ** 3):.2f} GB')

输出结果:

CPU Usage: 10.5%
Total Memory: 16.00 GB
Available Memory: 8.00 GB

解释:psutil 提供了一组函数来获取系统硬件和软件资源的使用情况。

8.platform - 获取平台信息

platform 模块用于获取当前系统的平台信息,如操作系统类型、版本等。

import platform

# 获取操作系统信息
system = platform.system()
version = platform.version()
architecture = platform.architecture()
print(f'System: {system}')
print(f'Version: {version}')
print(f'Architecture: {architecture}')

输出结果:

System: Darwin
Version: 21.1.0
Architecture: ('64bit', '')

解释:platform 模块提供了一系列函数来获取当前系统的详细信息。

9.tempfile - 创建临时文件和目录

tempfile 模块用于创建临时文件和目录,这些文件和目录在程序结束时会自动删除。

import tempfile

# 创建临时文件
with tempfile.NamedTemporaryFile(mode='w', delete=False) as temp_file:
    temp_file.write('Hello, Temp File!')
    temp_file_path = temp_file.name

print(f'Temporary file created at: {temp_file_path}')

# 创建临时目录
temp_dir = tempfile.TemporaryDirectory()
print(f'Temporary directory created at: {temp_dir.name}')
temp_dir.cleanup()  # 手动清理临时目录

输出结果:

Temporary file created at: /var/folders/xx/yy/T/tmpk123456
Temporary directory created at: /var/folders/xx/yy/T/tmpabcdefg

解释:tempfile.NamedTemporaryFile() 创建临时文件,tempfile.TemporaryDirectory() 创建临时目录,这些文件和目录在不再需要时会自动删除。

10.signal - 处理信号

signal 模块用于处理操作系统信号,如中断(Ctrl+C)等。

import signal
import time

# 定义信号处理函数
def signal_handler(sig, frame):
    print(f'Signal {sig} received. Exiting...')
    exit(0)

# 注册信号处理函数
signal.signal(signal.SIGINT, signal_handler)

print('Press Ctrl+C to exit...')
while True:
    time.sleep(1)

输出结果:

Press Ctrl+C to exit...
(Press Ctrl+C)
Signal 2 received. Exiting...

解释:signal.signal() 注册一个信号处理函数,当接收到指定信号时,调用该函数。在这个例子中,当接收到中断信号(Ctrl+C)时,程序会优雅地退出。

实战案例:系统监控脚本

现在,我们将上述知识结合起来,编写一个简单的系统监控脚本,每隔一定时间记录一次CPU和内存的使用情况。

import psutil
import time
import os

def log_system_info(log_file):
    with open(log_file, 'a') as f:
        cpu_usage = psutil.cpu_percent(interval=1)
        memory_info = psutil.virtual_memory()
        f.write(f'Timestamp: {time.strftime("%Y-%m-%d %H:%M:%S")}\n')
        f.write(f'CPU Usage: {cpu_usage}%\n')
        f.write(f'Total Memory: {memory_info.total / (1024 ** 3):.2f} GB\n')
        f.write(f'Available Memory: {memory_info.available / (1024 ** 3):.2f} GB\n')
        f.write('-' * 40 + '\n')

if __name__ == "__main__":
    log_file = 'system_monitor.log'
    interval = 10  # 监控间隔(秒)

    print(f'Logging system information to {log_file} every {interval} seconds...')

    try:
        while True:
            log_system_info(log_file)
            time.sleep(interval)
    except KeyboardInterrupt:
        print('Monitoring stopped.')

分析:这个脚本每隔一定时间记录一次系统的CPU和内存使用情况,并将信息写入日志文件中。当按下 Ctrl+C 时,脚本会优雅地停止运行。

总结

通过今天的文章,我们探索了Python中一些强大的隐藏功能,这些功能涵盖了从执行外部命令到系统监控的各个方面。我们学习了如何使用os 和subprocess 模块执行系统命令,shutil 模块进行文件和目录操作,psutil 模块获取系统信息,以及signal 模块处理操作系统信号。最后,我们通过一个实战案例展示了如何将这些知识结合起来,编写一个系统监控脚本。

责任编辑:武晓燕 来源: 小白PythonAI编程
相关推荐

2016-06-29 13:50:12

云计算

2021-09-15 09:20:37

Python函数代码

2024-06-21 15:00:42

Python系统调用功能

2023-12-12 17:46:33

系统kswapd0内核

2011-05-11 15:28:05

2011-01-28 15:11:15

PowerShell

2023-11-13 08:18:56

2022-06-08 10:42:34

ReduceJavaScript技巧

2019-04-01 06:37:12

R语言数据分析数据

2023-10-24 18:05:00

2022-06-08 23:45:44

iOS苹果功能

2023-02-06 16:46:59

JavaScript程序员技巧

2011-08-11 14:13:02

Windows8

2023-01-17 15:39:17

CSS功能函数

2023-05-11 16:29:39

Javascript开发前端

2022-07-26 09:09:23

Python编程语言代码

2019-09-04 14:30:54

Nginx功能服务器

2021-05-26 08:00:00

微服务开发求职

2021-08-29 23:40:51

手机华为功能

2015-07-23 10:37:13

Linux命令
点赞
收藏

51CTO技术栈公众号