如果ping一个地址并获取它返回值
我有这么一个需求,用python去ping一个地址,比如百度,ping通之后,我该怎么获取它的返回值?我要达到 if判断 ping通后执行一段代码,不通又执行另一段代码的效果。我现在是:
def Ping():
command = '"www.baidu.com"'
os.system(command)
但是这样出来的只会在控制台界面显示 d:\wp>ping www.baidu.com >1.txt
d:\wp>type 1.txt
正在 Ping www.a.shifen.com 具有 32 字节的数据:
来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54
来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54
来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54
来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54
110.242.68.4 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 26ms,最长 = 26ms,平均 = 26ms
d:\wp>
wp231957 发表于 2020-12-4 10:31
d:\wp>ping www.baidu.com >1.txt
d:\wp>type 1.txt
我不需要显示上面那些信息,比如ping通了,我就返回,网络连接成功,不通我就返回网络连接失败。 wnhuiyou 发表于 2020-12-4 10:32
我不需要显示上面那些信息,比如ping通了,我就返回,网络连接成功,不通我就返回网络连接失败。
那需要你自己判断 而且你还要多ping几个网站才能断定网络是否通畅 >>> import subprocess as s
>>> p = s.check_output('ping fishc.com.cn')
>>> print(p.decode(encoding = 'gbk'))
正在 Ping c5jxwwq5xyks84sz2bt78cw71jvphzaw.aliyunwaf.com 具有 32 字节的数据:
来自 101.37.44.185 的回复: 字节=32 时间=32ms TTL=93
来自 101.37.44.185 的回复: 字节=32 时间=32ms TTL=93
来自 101.37.44.185 的回复: 字节=32 时间=32ms TTL=93
来自 101.37.44.185 的回复: 字节=32 时间=32ms TTL=93
101.37.44.185 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 32ms,最长 = 32ms,平均 = 32ms
返回值?你是说命令执行输出的字符串还是退出状态码?用subprocess,命令输出和退出状态码都可以获取。
import subprocess
res = subprocess.Popen(['ping', 'www.baidu.com'], stdout=subprocess.PIPE, universal_newlines=True)
# 命令输出
shuchu, _ = res.communicate()
# 退出状态码
zhuangtaima = res.returncode
print(shuchu, zhuangtaima) 冬雪雪冬 发表于 2020-12-4 10:36
这里有处问题,就是使用你这段代码 ping一个不通的网址,会耗时很长,一段时间后就报错了。 wp231957 发表于 2020-12-4 10:35
那需要你自己判断 而且你还要多ping几个网站才能断定网络是否通畅
所以我就想知道下,怎么判断? 判断 文本里面有没有 信息?不会吧.. wnhuiyou 发表于 2020-12-4 10:50
所以我就想知道下,怎么判断? 判断 文本里面有没有 信息?不会吧..
我目前没啥好办法
比如检测数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), wnhuiyou 发表于 2020-12-4 10:50
所以我就想知道下,怎么判断? 判断 文本里面有没有 信息?不会吧..
看一下文本里丢失的数量 hrp 发表于 2020-12-4 10:48
返回值?你是说命令执行输出的字符串还是退出状态码?用subprocess,命令输出和退出状态码都可以获取。
其实我想要的效果就很简单, 就是测试一下网络连接状态, 通过ping一下固定的IP 如果通了就打印连接成功,不通就打印连接失败 这样用户看了也了解 hrp 发表于 2020-12-4 10:48
返回值?你是说命令执行输出的字符串还是退出状态码?用subprocess,命令输出和退出状态码都可以获取。
对了,你这段代码是我想要的效果,返回0和1 但是还想请教下你,ping的话会有一些时间,特别是ping一个网络不通的地址是,要等上十几秒,能不能让它时间缩短?比如ping 就获取一条信息 有返回值就返回0 没有返回值 也就是 请求超时 就返回1 不要等到ping结束后在返回 本帖最后由 hrp 于 2020-12-4 11:29 编辑
communicate方法里加参数timeout=x秒就行,超过timeout秒就退出。 hrp 发表于 2020-12-4 10:48
返回值?你是说命令执行输出的字符串还是退出状态码?用subprocess,命令输出和退出状态码都可以获取。
在请教一下 shuchu, _ = res.communicate()逗号后面的 _ 下划线表示什么意思呀? res.communicate()返回一个含两个元素的元组,相当于 a, b = (1, 2),这时候a得到1,b得到2。现在把b替换成下划线_,说明我只关心a的值,不关心b的值,但又不能只接收a不接收b,所以就用下划线来接收元组的第二个元素。 本帖最后由 hrp 于 2020-12-7 16:31 编辑
wnhuiyou 发表于 2020-12-7 15:51
在请教一下 shuchu, _ = res.communicate()逗号后面的 _ 下划线表示什么意思呀?
res.communicate()返回一个含两个元素的元组,相当于 a, b = (1, 2),这时候a得到1,b得到2。现在把b替换成下划线_,说明我只关心a的值,不关心b的值,但又不能只接收a不接收b,所以就用下划线来接收元组的第二个元素。相当于 a = res.communicate()
页:
[1]