一、Subprocess模块的定义:
-
subprocess
模块主要用于执行系统命令 -
subprocess
模块允许你产生新的进程,并获得它们的返回状态 - 通俗地说就是通过这个模块,你可以在 Python 的代码里执行操作系统级别的命令,比如
ifconfig
、du -sh
、ls
、echo
等等
补充:
-
subprocess
模块虽然可以支持所有的 linux 命令,但不可乱用,放弃其他的模块 - 不同于
shutil
和os
模块subprocess
模块编写的代码,不具有跨平台性,不能在 windows,mac 等系统使用
二、常用方法:subprocess.run()
- command是命令
- parameter是命令所需要的参数
分类 | 函数 / 方法 | 说明 |
---|---|---|
运行 无参命令 |
subprocess.run(["command"]) | 中括号可加可不加 |
subprocess.run(“command”,Shell=True) | Shell=True可加可不加 | |
运行 有参命令 |
subprocess.run(["command",“parameter”]) | 必须添加中括号,参数可以为多个 |
subprocess.run(“command parameter”,Shell=True) | 可以将命令完整写入 但是需要添加Shell=True来支持shell语法 |
三、run 方法返回值:
- run方法返回值:CompletedProcess(args='..', returncode=0)
- args:run函数执行的命令
- returncode:类似于$?,执行成功返回0,否则为非0
>>> subprocess.run('ls ..', shell=True) # 最后一行为返回值
day01 day02 day03 day04
CompletedProcess(args='ls ..', returncode=0)
# run方法查看上一级目录下的内容,赋值给变量result
>>> result = subprocess.run('ls ..', shell=True)
day01 day02 day03 day04
# 查看变量result的值,为run()的返回值
>>> result
CompletedProcess(args='ls ..', returncode=0)
# 查看result中args列表的内容,为linux命令
>>> result.args
'ls ..'
# 查看result中returncode的值,为0;returncode 为状态码
# 上一条命令执行成功,结果为0;反之,结果为非零值
>>> result.returncode
'0'
四、实操训练题:
需求:
- 编写ping函数
- 用于测试远程主机的联通性
- ping 通显示:x.x.x.x:up
- ping 不通显示:x.x.x.x:down
# 判断是否可以ping通的函数
def check_ping(ip_addresses):
data = subprocess.run(f"ping -c 2 {ip_addresses} &> /dev/null", shell=True)
if data.returncode == 0:
return True
return False
# 打印ping list 的结果状态
def check_pings(ip_lists):
for ip in ip_lists:
if check_ping(ip):
print(ip, "up")
else:
print(ip, "down")
# 初始化
if __name__ == '__main__':
ip_list = ["192.168.99.100", "192.168.88.10", "192.168.88.210",
"192.168.88.100", "192.168.88.5", "192.168.88.15",
"www.baidu.com", "www.yahu.com", "www.douyin.com",
"www.qq.com", "www.163.com", "www.wangyi.com"]
check_pings(ip_list)
网友评论