目录
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")


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





2517

被折叠的 条评论
为什么被折叠?



