使用Python执行Shell命令并获取结果

使用Python执行Shell命令并获取结果是一项非常有用的技能,尤其在自动化任务、系统管理和数据处理方面。Python提供了多种方法来运行Shell命令并捕获输出,最常用的是 subprocess模块。以下是如何使用 subprocess模块执行Shell命令并获取结果的详细指南。

1. 导入 subprocess模块

首先,需要导入 subprocess模块,这是Python中执行Shell命令的标准库。

import subprocess
 

2. 使用 subprocess.run执行Shell命令

subprocess.run是执行Shell命令的推荐方法。它在Python 3.5中引入,并且比旧的 subprocess.call和 subprocess.check_output方法更强大和灵活。

示例代码

以下示例展示了如何使用 subprocess.run执行一个简单的Shell命令,并捕获其输出。

result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
 
 

在这个示例中,['ls', '-l']是要执行的命令,capture_output=True表示捕获标准输出和标准错误,text=True表示将输出作为字符串处理。

3. 错误处理

执行Shell命令时,处理错误非常重要。可以使用 subprocess.run的 check参数来自动检查命令是否成功执行。

示例代码

try:
    result = subprocess.run(['ls', '-l'], capture_output=True, text=True, check=True)
    print(result.stdout)
except subprocess.CalledProcessError as e:
    print(f'Error occurred: {e}')
​
 
 

如果命令失败,subprocess.CalledProcessError将被抛出,并包含错误信息。

4. 捕获标准错误

有时,需要捕获和处理标准错误输出。可以通过访问 result.stderr来实现。

示例代码

result = subprocess.run(['ls', '-l', '/nonexistent_directory'], capture_output=True, text=True)
if result.returncode != 0:
    print(f'Error: {result.stderr}')
​
 
 

5. 执行复杂命令

可以执行更复杂的命令,包括管道和重定向。在这种情况下,需要使用 shell=True参数。

示例代码

result = subprocess.run('ls -l | grep py', shell=True, capture_output=True, text=True)
print(result.stdout)
 
 

注意:使用 shell=True时要小心,尤其是在处理不可信输入时,因为它可能带来安全风险。

6. 实用示例

以下是一个更实际的示例,展示如何使用Python脚本自动备份一个目录:

示例代码

import subprocess
import os

# 定义要备份的目录和目标目录
source_dir = '/path/to/source'
backup_dir = '/path/to/backup'

# 创建备份目录
os.makedirs(backup_dir, exist_ok=True)

# 执行rsync命令进行备份
try:
    result = subprocess.run(['rsync', '-av', source_dir, backup_dir], capture_output=True, text=True, check=True)
    print('Backup successful')
    print(result.stdout)
except subprocess.CalledProcessError as e:
    print(f'Backup failed: {e.stderr}')
posted @ 2025-08-22 11:42  我是一只小小鸟~  阅读(17)  评论(0)    收藏  举报