Python 2.x 中如何使用subprocess模块执行外部命令
在 Python 中,我们可以使用 subprocess 模块执行外部命令并与之交互。它允许我们创建新进程、连接进程输入/输出/错误流(管道)、获取进程的返回值等等。在本文中,我们将学习如何使用该模块在 Python 2.x 中执行外部命令。
1. 调用外部命令
使用 subprocess.call() 函数可以轻松调用外部命令。下面是一个简单的示例,调用了 ls 命令:
import subprocess
subprocess.call(['ls', '-l'])
在这里,我们传递了一个列表作为 subprocess.call() 函数的参数。该列表包含了需要执行的命令及其参数。在这个例子中,ls 命令以及其参数 -l 被作为列表元素传递。
需要注意的是,subprocess.call() 只执行命令并等待其完成,返回状态码。如果需要与命令交互(比如输入数据给命令、获取命令的输出等),我们需要使用其他函数。
2. 创建子进程
使用 subprocess.Popen() 函数可以创建一个子进程并与其进行交互。下面是一个简单的示例:
import subprocess
p = subprocess.Popen(['date'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print('Output: ' + out)
print('Error: ' + err)
在此示例中,我们创建了一个子进程来打印当前日期和时间。首先,我们使用 subprocess.Popen() 创建了一个子进程,并传递了要执行的命令及其参数,其中 stdout=subprocess.PIPE 和 stderr=subprocess.PIPE 分别表示将标准输出和标准错误输出连接到一个管道中。
然后,我们使用 communicate() 函数与子进程交互,获取子进程的输出和错误信息,并将其存储在变量 out 和 err 中。最后,我们将输出和错误信息打印出来。
3. 传递输入数据给命令
如果需要向命令传递输入数据,我们可以使用 subprocess.Popen() 函数创建一个子进程,并将输入数据写入其标准输入流中。下面是一个示例:
import subprocess
text = 'Hello, world!'
p = subprocess.Popen(['wc', '-c'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate(text)
print('Output: ' + out)
print('Error: ' + err)
在此示例中,我们创建了一个子进程来计算输入数据的字节数。首先,我们将输入数据 text 定义为一个字符串。
然后,我们使用 subprocess.Popen() 创建一个子进程,传递了要执行的命令及其参数,其中 stdin=subprocess.PIPE 和 stdout=subprocess.PIPE 分别表示将标准输入和标准输出输出到一个管道中。
接着,我们使用 communicate() 函数与子进程交互,并将输入数据作为参数传递给它。最后,我们将输出和错误信息打印出来。
4. 使用环境变量
在一些情况下,我们可能需要在命令执行过程中使用环境变量。我们可以使用 subprocess.Popen() 函数的 env 参数来指定环境变量。以下是一个示例:
import os
import subprocess
env = os.environ.copy()
env['TEMPERATURE'] = '0.6'
p = subprocess.Popen(['echo $TEMPERATURE'], env=env, stdout=subprocess.PIPE, shell=True)
out, err = p.communicate()
print('Output: ' + out)
print('Error: ' + err)
在此示例中,我们创建了一个环境变量 TEMPERATURE=0.6,并将其添加到当前进程的环境变量中。然后,我们使用 subprocess.Popen() 执行 echo $TEMPERATURE 命令,并传递了 env 参数来指定环境变量。最后,我们将输出和错误信息打印出来。
总结
在本文中,我们学习了如何使用 subprocess 模块在 Python 2.x 中执行外部命令。具体来说,我们了解了如何调用外部命令、创建子进程、传递输入数据给命令,以及如何使用环境变量。