python—3种执行CMD命令的方法、pythonping库无阻塞执行ping命令

本文介绍了Python中三种执行CMD命令的方法,包括os.system()、os.popen()以及使用subprocess模块。此外,还详细讲解了如何通过pythonping库实现无阻塞的ping命令执行,以避免执行堵塞并简化数据提取过程。
部署运行你感兴趣的模型镜像

目录

3种执行CMD命令的方法

python的OS模块

os.system()

os.popen()

管道subprocess模块

commands用于Linux系统命令执行

pythonping库无阻塞执行ping


3种执行CMD命令的方法

python的OS模块

os模块调用CMD命令有两种方式:popen与system可以执行指令,popen可以接受返回对象,这两个都是用当前进程来调用,都是阻塞式的

  • os.system 无法获取返回值。操作完成后,程序在下面执行。
  • os.popen 有返回值,可通过read()得到返回值,可对返回值进行其他逻辑判断使用

os.system()

os.system()执行后直接将返回值打印到控制台 

import os

cmd = 'adb devices'

mes = os.system(cmd)
print(mes)  # 打印结果,执行成功返回0,失败返回1

  

os.popen()

os.popen()执行后,可通过read()得到返回值,可对返回值进行其他逻辑判断使用

# mes = os.popen(cmd1)
# mes.close()  # 使用完成关闭,减少内存占用
# print(mes.read())

with os.popen(cmd) as mes:  # 使用上下文管理,结果同上
    print(mes.read())

  

管道subprocess模块

在当前进程下面产生子进程。subprocess.Popen()执行后得到返回值

import subprocess

sub = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='gbk')
sub.wait()
print(sub.returncode)  # 打印执行结果状态:执行成功返回0,失败返回1
# print(sub.communicate()[0])  # 获取所有的执行结果
print(sub.stdout.read())  # 读取执行结果

  

sub = subprocess.Popen(cmd, shell=True, stdout=None, stderr=None).wait()
print(sub)  # 打印执行结果状态:执行成功返回0,失败返回1

  

subprocess.run(cmd) 

subprocess.run(cmd)  # 将执行结果直接打印出来

  

commands用于Linux系统命令执行

status, output = commands.getstatusoutput('cmd')  # 执行并返回执行状态和执行结果
status = commands.getstatus('cmd')  # 执行并返回执行状态
output = commands.getoutput('cmd')  # 执行并返回执行结果

pythonping库无阻塞执行ping

执行ping命令可通过cmd命令执行,见上

os模块的下ping的方式,易造成执行堵塞,并且提取比较繁琐

使用pythonping模块,无堵塞现象,并且易于提取。安装:pip install pythonping,使用如下:

from pythonping import ping
from colorama import Fore, Back, Style


def check_online(ip: str):
    message = ping(ip)
    success_ping = "Reply"
    if success_ping in str(message):
        print(message)
        print(Fore.GREEN + Style.BRIGHT + f"localhost to - {ip} 成功.")
    else:
        print(Fore.RED + Style.BRIGHT + Back.BLACK + f'{message}\n' + f"localhost to - {ip} 失败.")


if __name__ == '__main__':
    check_online("www.baidu.com")
    print(Style.RESET_ALL)
    check_online("100.110.111.101")

  

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值