Python 执行 Linux 命令

1. 概述
在 Python 编程语言中,我们可以使用 subprocess 模块执行 Linux 命令。subprocess 模块允许我们在 Python 脚本中调用系统命令,并获取命令的输出结果。
本文将详细介绍如何使用 Python 执行 Linux 命令,包括执行简单命令、执行带参数的命令、处理命令的输出结果等。
2. 执行简单命令
使用 subprocess 模块执行简单的 Linux 命令非常简单。我们可以使用 subprocess.run() 方法来调用系统命令,并等待命令执行完毕。
下面是一个例子,我们将使用 Python 执行 ls 命令,列出当前目录下的文件和文件夹:
import subprocess
result = subprocess.run(['ls'], capture_output=True, text=True)
print(result.stdout)
代码解释:
subprocess.run(['ls'])调用系统命令ls,并等待命令执行完毕。capture_output=True表示将命令的输出结果捕获到变量result中。text=True表示将命令的输出结果以文本形式返回。
上述代码执行结果将输出当前目录下的文件和文件夹的列表。
3. 执行带参数的命令
有时候我们需要执行带参数的命令,例如执行 grep 命令查找特定的文本。我们可以在 subprocess.run() 方法中传入命令及其参数列表来执行带参数的命令。
下面是一个例子,我们将使用 Python 执行 grep 命令在文件中查找包含特定文本的行:
import subprocess
result = subprocess.run(['grep', 'pattern', 'file.txt'], capture_output=True, text=True)
print(result.stdout)
代码解释:
subprocess.run(['grep', 'pattern', 'file.txt'])执行带参数的命令grep pattern file.txt。capture_output=True表示将命令的输出结果捕获到变量result中。text=True表示将命令的输出结果以文本形式返回。
上述代码执行结果将输出包含特定文本的行。
4. 处理命令的输出结果
subprocess.run() 方法返回的 result 对象包含命令的执行结果、输出结果、错误信息等。
4.1 获取命令的执行结果
要获取命令的执行结果,可以使用 result.returncode 属性。result.returncode 的值为 0 表示命令执行成功,非 0 表示命令执行失败。
下面是一个例子,我们将使用 Python 执行 ls 命令,并检查命令的执行结果是否成功:
import subprocess
result = subprocess.run(['ls'], capture_output=True, text=True)
if result.returncode == 0:
print("Command executed successfully")
else:
print("Command execution failed")
代码解释:
result.returncode获取命令的执行结果。- 根据
result.returncode的值判断命令是否执行成功。
4.2 获取命令的输出结果
要获取命令的输出结果,可以使用 result.stdout 属性。result.stdout 存储命令的标准输出结果。
下面是一个例子,我们将使用 Python 执行 ls 命令,并打印出命令的输出结果:
import subprocess
result = subprocess.run(['ls'], capture_output=True, text=True)
print(result.stdout)
代码解释:
– result.stdout 获取命令的输出结果。
– 使用 print() 函数打印命令的输出结果。
4.3 处理命令的错误信息
要获取命令的错误信息,可以使用 result.stderr 属性。result.stderr 存储命令的标准错误输出。
下面是一个例子,我们将使用 Python 执行错误的命令,并打印出命令的错误信息:
import subprocess
result = subprocess.run(['wrong_command'], capture_output=True, text=True)
print(result.stderr)
代码解释:
result.stderr获取命令的错误信息。- 使用
print()函数打印命令的错误信息。
5. 使用管道连接命令
subprocess.run() 方法允许我们使用管道 (|) 连接多个命令,实现命令的串联执行。
下面是一个例子,我们将使用 Python 执行 ls -l | grep pattern 这个命令组合,实现先列出当前目录下的文件和文件夹的详细信息,然后通过 grep 命令筛选包含特定文本的行:
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
ls_output = result.stdout
result = subprocess.run(['grep', 'pattern'], input=ls_output, capture_output=True, text=True)
grep_output = result.stdout
print(grep_output)
代码解释:
- 第一个
subprocess.run(['ls', '-l'])命令执行ls -l,并将结果存储到ls_output变量中。 - 第二个
subprocess.run(['grep', 'pattern'], input=ls_output)命令执行grep pattern,并将ls_output作为输入。 - 打印出
grep命令的输出结果。
上述代码执行结果将输出包含特定文本的行。
6. 阻塞与非阻塞执行
在默认情况下,subprocess.run() 方法是阻塞的,即 Python 代码会等待命令执行完成后才会继续往下执行。
如果需要使用非阻塞的方式执行命令,可以使用 subprocess.Popen() 方法。
下面是一个例子,我们将使用 Python 非阻塞地执行 ping 命令:
import subprocess
subprocess.Popen(['ping', 'example.com'])
print("Command executed in non-blocking mode")
代码解释:
subprocess.Popen(['ping', 'example.com'])使用非阻塞方式执行ping命令。print()函数直接打印出文字,而不需要等待命令执行完成。
上述代码执行后,程序将立即打印出 “Command executed in non-blocking mode”,而不需要等待 ping 命令执行完成。
7. 总结
本文介绍了如何使用 Python 执行 Linux 命令。我们学习了如何执行简单命令、执行带参数的命令、处理命令的输出结果等技巧。通过灵活运用 subprocess 模块,我们可以在 Python 脚本中轻松调用系统命令,并获取命令的输出结果,从而实现更强大的功能。
极客教程