如何在 Py 脚本中调用 Linux 命令

在 Python 脚本中调用 Linux 命令是一项非常实用的技能,它可以让我们在 Python 环境中直接利用 Linux 系统的强大功能。本文将介绍在 Python 脚本中调用 Linux 命令的方法和技巧,帮助你更好地利用这一功能。
一、使用 subprocess 模块
Python 的 subprocess 模块提供了一个强大的接口,可以用来创建新的进程,并与它们进行交互。通过 subprocess 模块,我们可以在 Python 脚本中调用 Linux 命令,并获取命令的输出结果。
以下是一个简单的示例代码,演示了如何使用 subprocess 模块调用 Linux 命令:
```python
import subprocess
# 调用 ls 命令,列出当前目录下的文件和文件夹
result = subprocess.run(['ls'], capture_output=True, text=True)
# 输出命令的输出结果
print(result.stdout)
```
在上述代码中,我们使用 `subprocess.run()` 函数调用了 `ls` 命令,并将输出结果捕获到 `result.stdout` 中。我们打印出了命令的输出结果。
需要注意的是,`subprocess.run()` 函数的 `capture_output=True` 参数用于捕获命令的输出结果,`text=True` 参数用于将输出结果以文本形式返回。如果不设置这两个参数,输出结果将以字节形式返回。
二、处理命令的错误输出
在调用 Linux 命令时,可能会出现命令执行失败的情况,此时 `subprocess.run()` 函数将返回一个非零的退出码。我们可以通过检查退出码来判断命令是否执行成功,并处理命令的错误输出。
以下是一个示例代码,演示了如何处理命令的错误输出:
```python
import subprocess
try:
# 调用 grep 命令,在文件中搜索指定的字符串
result = subprocess.run(['grep', 'pattern', 'file.txt'], capture_output=True, text=True, check=True)
# 输出命令的输出结果
print(result.stdout)
except subprocess.CalledProcessError as e:
# 输出命令的错误输出
print(e.stderr)
```
在上述代码中,我们使用 `try-except` 语句来捕获 `subprocess.run()` 函数可能抛出的 `CalledProcessError` 异常。如果命令执行成功,`subprocess.run()` 函数将正常返回,我们可以通过 `result.stdout` 获取命令的输出结果。如果命令执行失败,`subprocess.run()` 函数将抛出 `CalledProcessError` 异常,我们可以通过 `e.stderr` 获取命令的错误输出。
三、传递参数和环境变量
在调用 Linux 命令时,我们可以通过传递参数和环境变量来定制命令的行为。subprocess 模块提供了 `args` 和 `env` 参数来传递参数和环境变量。
以下是一个示例代码,演示了如何传递参数和环境变量:
```python
import subprocess
# 定义命令的参数
args = ['echo', 'Hello', 'World']
# 定义环境变量
env = {'PATH': '/usr/local/bin:/usr/bin:/bin'}
# 调用 echo 命令,并传递参数和环境变量
result = subprocess.run(args, env=env, capture_output=True, text=True)
# 输出命令的输出结果
print(result.stdout)
```
在上述代码中,我们通过 `args` 参数传递了 `echo` 命令的参数 `Hello` 和 `World`,通过 `env` 参数传递了环境变量 `PATH`。这样,`echo` 命令将在指定的环境变量路径下执行,并输出指定的字符串。
四、执行管道命令
在 Linux 系统中,我们可以使用管道符号 `|` 将多个命令连接起来,形成一个管道命令。在 Python 脚本中,我们可以使用 subprocess 模块来执行管道命令。
以下是一个示例代码,演示了如何执行管道命令:
```python
import subprocess
# 定义管道命令
command = 'ls -l | grep "python"'
# 调用管道命令,并获取输出结果
result = subprocess.run(command, shell=True, capture_output=True, text=True)
# 输出命令的输出结果
print(result.stdout)
```
在上述代码中,我们通过 `shell=True` 参数将管道命令作为一个字符串传递给 `subprocess.run()` 函数。这样,Python 脚本将在 shell 中执行管道命令,并获取命令的输出结果。
需要注意的是,在使用 `shell=True` 参数时,要注意安全问题,避免在命令中注入恶意代码。
五、总结
通过使用 Python 的 subprocess 模块,我们可以在 Python 脚本中轻松地调用 Linux 命令,并获取命令的输出结果。在调用 Linux 命令时,我们可以使用 `subprocess.run()` 函数来执行命令,并通过捕获输出结果和处理错误来获取命令的执行状态。我们还可以通过传递参数和环境变量来定制命令的行为,以及使用管道命令来连接多个命令。
在 Python 脚本中调用 Linux 命令是一项非常实用的技能,它可以让我们更好地利用 Linux 系统的强大功能。希望本文对你有所帮助,让你能够更加熟练地在 Python 脚本中调用 Linux 命令。