瓶 Python ping 检查 5 ping

Posted

技术标签:

【中文标题】瓶 Python ping 检查 5 ping【英文标题】:Bottle Python ping check 5 pings 【发布时间】:2018-09-21 08:07:30 【问题描述】:

我正在尝试编写一个脚本,用 5 个 ping 将 ping 检查打印到浏览器。

这个脚本:

from bottle import route, run, template
import subprocess

@route('/pings/<ip>')

def ping(ip):
   param = '-c 1'
   command = ['ping', param, ip]
   num = 0
   while (num < 6):
      return subprocess.check_output(command)
      num += 1

run(host='0.0.0.0', port=8080)

目前输出到浏览器如下:

PING 8.8.8.8 (8.8.8.8) 56(84) 字节数据。来自 8.8.8.8 的 64 个字节: icmp_seq=1 ttl=54 time=17.7 ms --- 8.8.8.8 ping 统计 --- 1 传输的数据包,接收的 1 个数据包,0% 数据包丢失,时间 0ms rtt 最小/平均/最大/mdev = 17.756/17.756/17.756/0.000 毫秒

但它并没有像我期望的那样打印出 5 个 ping。它只打印出一个 ping,是否由于某种原因只打印出最后一个?如果您从 shell 命令运行它,我如何打印出 5 个 ping。

谢谢。

【问题讨论】:

return 结束函数,所以你只运行一次subprocess.check_output。您必须多次运行它,将结果收集到一个容器(如列表)中,然后返回。 【参考方案1】:

循环只运行一次,因为return 在循环的第一次迭代期间执行,因此您只会得到第一个结果。您可以获取 ping 结果并将其附加到列表中,然后一旦循环完成,您就可以返回该列表。

def ping(ip):
   param = '-c 1'
   command = ['ping', param, ip]
   num = 0
   output = []
   while (num < 6):
      output.append(subprocess.check_output(command))
      num += 1
   return output // or return "\n".join(output)

【讨论】:

TypeError: 描述符 'append' 需要一个 'list' 对象但收到了一个 'str' - 现在谷歌搜索 抱歉打错字了!现在修复它 我知道了,谢谢。实际上,我也可以将 param = 'c 1' 更改为 param = 'c 6' ,但我更喜欢循环,以便在每次 ping 后添加新行

以上是关于瓶 Python ping 检查 5 ping的主要内容,如果未能解决你的问题,请参考以下文章

Python:检查 IRC 连接是不是丢失(PING PONG?)

求职 | 华为研发工程师编程题个人题解C++Python

1 元钱买一瓶汽水,两个空汽水瓶换一瓶汽水。现有 20 元钱,问最多可以喝到多少瓶汽水?

华为python机试题目:明明的随机数汽水瓶求int型正整数在内存中存储时1的个数取近似值蛇形矩阵数据分类处理数字颠倒

[C语言]——喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,共有20元,请问可以喝多少瓶汽水?

8字形 克莱因瓶 matlab