python 在代码中执行linux命令
在 Python 中可以使用 subprocess
模块来执行 Linux 命令。subprocess
是一个非常强大且灵活的模块,允许你启动新的进程、连接它们的输入输出流,并获取其返回值。
下面是使用 subprocess
模块执行 Linux 命令的几种常用方法:
1. 使用 subprocess.run
subprocess.run
是推荐的方式,可以捕获输出和错误信息。
import subprocess
# 执行一个简单的 Linux 命令,比如 'ls -l'
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
# 输出结果
print("命令输出:")
print(result.stdout)
# 输出错误(如果有)
if result.stderr:
print("命令错误信息:")
print(result.stderr)
# 检查命令退出状态码
if result.returncode == 0:
print("命令执行成功")
else:
print("命令执行失败")
2. 使用 subprocess.Popen
Popen
提供更大的灵活性,适合需要长时间运行或流式处理标准输入输出的情况。
import subprocess
# 启动一个进程执行 'ping -c 3 localhost'
process = subprocess.Popen(['ping', '-c', '3', 'localhost'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 获取标准输出和错误输出
stdout, stderr = process.communicate()
# 转换为字符串
stdout = stdout.decode('utf-8')
stderr = stderr.decode('utf-8')
# 打印输出结果
print("命令输出:")
print(stdout)
if stderr:
print("命令错误信息:")
print(stderr)
3. 使用 os.system
(不推荐)
虽然简单,但它无法获取标准输出和标准错误,通常只用于最简单的情况。
import os
# 执行命令
retcode = os.system('ls -l')
# 检查退出状态
if retcode == 0:
print("命令执行成功")
else:
print("命令执行失败")
注意事项
- 安全性: 避免在未经处理的用户输入中使用命令参数以防止命令注入。
- 输出来自标准流: 建议使用
subprocess.run
和Popen
来捕获和查看命令的输出和错误详细信息。 - 返回码: 检查返回码以确定命令的成功或失败。
通过上述方法,你可以在 Python 程序中有效地执行和监视 Linux 命令操作。