Python 脚本也能玩 Bash 命令?带你解锁 Python 的黑科技278


前言

Python 作为一门功能强大的编程语言,不仅可以处理数据、进行计算,还能与系统交互。其中,Python 提供了一个名为 subprocess 模块的利器,让我们能够在 Python 脚本中无缝地执行 Bash 命令,实现更加灵活多样的自动化任务。

subprocess 模块简介

subprocess 模块是一个允许 Python 脚本创建新进程并与之交互的内置模块。我们可以使用该模块执行外部命令或程序,获取其输出或向其输入数据。

subprocess 模块提供了多种方法来创建新进程,其中最常用的方法是 Popen 函数。Popen 函数允许我们指定要执行的命令,并控制新进程的输入、输出和错误流。

在 Python 脚本中执行 Bash 命令

要使用 subprocess 模块执行 Bash 命令,我们可以使用 Popen 函数。Popen 函数接受以下参数:* args:要执行的命令及其参数
* stdin:要传递给新进程的标准输入
* stdout:要传递给新进程的标准输出
* stderr:要传递给新进程的标准错误输出

以下是执行 Bash 命令的示例代码:```python
import subprocess
# 执行 whoami 命令并捕获其输出
output = (['whoami'], stdout=).communicate()[0]
# 打印输出
print(('utf-8'))
```

读取 Bash 命令的输出

执行 Bash 命令后,我们可以使用 communicate 方法来获取其输出。communicate 方法会返回一个元组,其中第一个元素是命令的标准输出,第二个元素是命令的标准错误输出。

要读取命令的输出,我们需要对第一个元素进行解码。Python 会自动将输出字节流解码为字符串。以下是读取 Bash 命令输出的示例代码:```python
import subprocess
# 执行 ls -l 命令并捕获其输出
output = (['ls', '-l'], stdout=).communicate()[0]
# 打印输出
print(('utf-8'))
```

向 Bash 命令写入输入

除了读取命令的输出外,我们还可以向命令写入输入。为此,我们需要使用 Popen 函数的 stdin 参数。

stdin 参数接受一个文件对象或字节流。我们可以使用 open 函数创建一个文件对象,并使用 write 方法写入数据。以下是向 Bash 命令写入输入的示例代码:```python
import subprocess
# 创建一个文件对象
input_file = open('', 'w')
# 向文件对象写入数据
('Hello, world!')
# 执行 cat 命令并使用文件对象作为其输入
(['cat'], stdin=input_file)
```

捕获 Bash 命令的错误输出

有时,Bash 命令可能会产生错误。我们可以使用 Popen 函数的 stderr 参数来捕获这些错误。

stderr 参数接受一个文件对象或字节流。我们可以使用 open 函数创建一个文件对象,并将错误重定向到该文件对象。以下是捕获 Bash 命令错误输出的示例代码:```python
import subprocess
# 创建一个文件对象
error_file = open('', 'w')
# 执行 cat 命令并使用文件对象作为其错误输出
(['cat', 'non-existent-file'], stderr=error_file)
```

通过 subprocess 模块,我们可以轻松地在 Python 脚本中执行 Bash 命令,从而实现更加灵活多样的自动化任务。掌握 subprocess 模块的使用技巧,可以帮助我们高效地与系统交互,处理各种文件和命令操作。

2024-12-19


上一篇:用 Bash 脚本轻松搭建数据库

下一篇:bash脚本中source命令的用法详解