Python中文
首页
教程
问答
标签
搜索
登录
注册
通过Popen帮助ping
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在开发一个软件来监控不同地点的通讯。 原理很简单:每秒发送ping并实时显示结果(毫秒延迟、丢包等)</p> <p>还有一点很重要,我是从Linux运行软件的,所以为了从我的软件ping,我选择亚过程。波本是的,因为打开套接字需要您以root用户的身份登录。我不想让每个人都有访问服务器的权限。。在</p> <p>以下是负责ping的类:</p> <pre><code> class WorkerThread(QThread): def __init__(self,receiver,sitename): QThread.__init__(self) global time_manager time_manager[sitename] = [time.time(),0,0] #for statistic purpeses self.stopped = 0 self.receiver = receiver self.sitename = sitename def run(self): icmp_count = 0 ping_result = "" packeloss_result = "" while not self.stopped: data = subprocess.Popen("ping -c1 "+str(sites[self.sitename]),shell = True,stdout=subprocess.PIPE) data.wait() time_manager[self.sitename][1] +=1 #counts the icmps sent bufferdata = data.stdout.read() ping_result = ms_pat.findall(bufferdata) packeloss_result = packetloss_pat.findall(bufferdata) if ping_result: ping_ms = ping_result[0][0] if packeloss_result: time_manager[self.sitename][2] +=1 ping_ms = "-1" ms_count[self.sitename].<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(float(ping_ms)) time.sleep(1) event = QCustomEvent(12345) event.setData(self.sitename+ping_ms) QApplication.postEvent(self.receiver, event) def stop(self): self.stopped = 1</code></pre> <p>我使用线程是因为有时我需要对不同的站点运行多个ping作业。在</p> <p>我的问题是: 运行时,我得到了毫秒延迟的完美结果,但每隔几次ping我就得到一个不准确的结果,比实际应该的要高。在</p> <p>我知道结果是不准确的,因为我同时在控制台上运行ping,而在那里我没有ping峰值</p> <p>示例:</p> <p>pingđms=20.0</p> <p>pingđms=21.31</p> <p>平逖ms=23.23</p> <p><strong>ping_ms=80.2</strong></p> <p>平逖ms=23.23</p> <p>pingđms=24.2</p> <p>我不明白为什么会这样。也许我需要用不同的方式编写代码。如果有人能帮助我,我将不胜感激。在</p> <p>谢谢。在</p> <p><strong>我已经隔离了问题:</strong></p> <p>问题似乎不在代码中,而是在操作系统或ping命令本身。 当我每秒钟在控制台中手动运行命令:“ping-c1xxx.xxx.xxx.xxx“几次尝试后,我得到了相同的结果,一个奇怪的ping峰值。但是如果“乒”流利的“乒”xxx.xxx.xxx.xxx“,没有尖峰。在</p> <p>是否可以从脚本中使用Popen运行fluent ping并读取结果?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>这看起来是一个很好的起点:</p> <p><a href="http://pypi.python.org/pypi/ping/0.1" rel="nofollow">http://pypi.python.org/pypi/ping/0.1</a></p> <p>当然,现在还不清楚你现在所做的是否真的有任何问题。由于ping时间是从ping的输出中解析出来的,所以我们不能将其归咎于进程生成开销之类的。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
7 回答
如何添加表示整数的擦边字符串?
3 回答
如何添加要在Bokeh中使用的新font.ttf文件?
4 回答
如何添加要显示的矩阵XY轴编号和XY轴
3 回答
如何添加计数?
6 回答
如何添加计数器函数?
8 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
1 回答
如何添加计数器来跟踪while循环中的月份和年份?
7 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
8 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
10 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
4 回答
如何添加评论拉梅尔亚姆
9 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
3 回答
如何添加谷歌地点自动完成到Flask?
6 回答
如何添加超时、python discord bot
1 回答
如何添加超过1dp的检查
4 回答
如何添加距离方法
9 回答
如何添加跟随游戏的敌人精灵
10 回答
如何添加路径以便python可以找到程序?
2 回答
如何添加身份验证/安全性以使用happybase访问HBase?
2 回答