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 脚本中轻松调用系统命令,并获取命令的输出结果,从而实现更强大的功能。