Python2 执行 Shell 脚本
简介
在 Python 中,我们可以使用 subprocess
模块来执行 Shell 命令和脚本。Shell 脚本是一种用于自动化执行一系列命令的脚本文件,它可以帮助我们完成各种任务,如文件操作、系统管理、进程控制等。在本文中,我们将介绍如何使用 Python2 的 subprocess
模块来执行 Shell 脚本,并提供一些示例代码帮助理解。
安装
在使用 subprocess
模块之前,我们需要确保 Python2 已经安装在我们的计算机上。可以通过以下命令来检查 Python2 是否已经安装:
python2 --version
如果已经安装,则会显示 Python2 的版本号。如果未安装,则需要先安装 Python2。可以从 Python 官方网站下载安装程序并按照提示进行安装。
执行 Shell 命令
subprocess
模块提供了多个函数来执行 Shell 命令,其中最常用的是 subprocess.call()
函数。该函数接受一个字符串参数,该参数是要执行的 Shell 命令,例如:
import subprocess
subprocess.call("ls -l", shell=True)
上述代码会执行 ls -l
命令,并将结果打印到控制台。shell=True
参数表示将命令解释为一个完整的 Shell 命令字符串。
除了 subprocess.call()
函数,subprocess
模块还提供了其他函数,例如 subprocess.check_output()
可以获取命令的输出结果,subprocess.Popen()
可以更灵活地执行命令并处理输入输出流等。
执行 Shell 脚本
执行 Shell 脚本与执行单个 Shell 命令类似,只需将脚本的路径作为参数传递给 subprocess.call()
函数即可。例如:
import subprocess
subprocess.call("./script.sh", shell=True)
上述代码会执行名为 script.sh
的 Shell 脚本,并将结果打印到控制台。script.sh
需要与 Python 脚本在同一目录下,或者使用绝对路径来指定其位置。
接收 Shell 命令输出
在执行 Shell 命令或脚本时,我们可以通过 subprocess
模块来获取命令的输出结果。例如,使用 subprocess.check_output()
函数可以获取命令的输出结果作为一个字符串:
import subprocess
output = subprocess.check_output("echo 'Hello, World!'", shell=True)
print(output)
上述代码会执行 echo 'Hello, World!'
命令,并将输出结果打印到控制台。
如果命令的输出结果较大或需要按行处理,可以使用 subprocess.Popen()
函数来处理输入输出流。例如:
import subprocess
p = subprocess.Popen("ls -l", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
print("Standard Output:")
print(stdout)
print("Standard Error:")
print(stderr)
上述代码会执行 ls -l
命令,并将标准输出和标准错误输出分别保存到 stdout
和 stderr
变量中,然后打印到控制台。
示例
下面是一个示例,演示如何使用 Python2 执行 Shell 脚本来统计指定目录下不同类型文件的数量,并用饼状图展示结果:
import subprocess
import re
import matplotlib.pyplot as plt
def count_files(directory):
output = subprocess.check_output("ls -l {}".format(directory), shell=True)
pattern = r"\s+(\d+)\s+([^\s]+)$"
files = re.findall(pattern, output, re.MULTILINE)
file_counts = {}
for file_info in files:
file_type = file_info[1].split(".")[-1]
if file_type not in file_counts:
file_counts[file_type] = 0
file_counts[file_type] += 1
return file_counts
def plot_pie_chart(data):
labels = list(data.keys())
sizes = list(data.values())
plt.pie(sizes, labels=labels, autopct="%1.1f%%")
plt.axis("equal")
plt