如何基于subprocess命令输出的1或0创建关联的布尔变量?
如何根据ping命令的输出创建布尔变量
你现在用subprocess.call的方式不对,因为这个函数返回的是命令的退出状态码(0代表命令执行成功,非0代表失败),不是终端里打印的那个'1'或'0'。要拿到命令的输出内容,得换用能捕获标准输出的方法,比如subprocess.run。
正确做法示例:
import subprocess # 执行命令并捕获输出 result = subprocess.run( "ping 192.168.1.127 -c 1 | grep 'received' | awk -F',' '{ print $2}' | awk '{ print $1}'", shell=True, capture_output=True, text=True ) # 提取输出内容,去掉多余的换行符 output = result.stdout.strip() # 转成整数后再转布尔变量:1对应True(网络可达),0对应False(不可达) is_reachable = bool(int(output)) print(f"命令输出内容: {output}") print(f"目标是否可达: {is_reachable}")
补充说明:
capture_output=True:用来捕获命令的标准输出和错误输出text=True:让输出直接以字符串形式返回,无需手动解码字节流- 如果担心命令执行出错(比如ping失败导致没匹配到'received'字段),可以先判断
result.returncode是否为0,确保命令执行成功后再处理输出。
内容的提问来源于stack exchange,提问作者chiques
相关产品推荐
相关产品推荐

