Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29336658
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-03-11 11:57:35

为了能够正常地使用系统自带命令先来分析一下原理吧!

linux ping 命令详解

功能说明:检测主机。

语  法:ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载 入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

补充说明:执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

参  数:
-d 使用Socket的SO_DEBUG功能。
-c<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络界面送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
第二步:封装一个方法传入一个系统命令返回一个是否主机正常ping 通的方法!
result = os.system("ping -n 3  192.168.100.12")  感觉这个家伙居然能够返回一个数字过来!
上网找找:
os.system 返回的是命令执行的返回值,ls 执行成功了,返回0,所以你的 xx 就是0了~
终于被我发现了问题所在了:原来在linux环境中返回的为什么总是256呢?答案
记得老早的时候python.cn邮件列表上有朋友问过os.system()的返回值异常的问题。今天又碰到啦,所以总结下。
问题:
/bin/xxx.py是一个返回码为1的程序。
当python 程序使用os.system(”./bin/xxx.py”) 这样调用的时候, 成功运行后os.system 的返回值出现了问题,变成了256 ,也就是0×100。而不是正常应该返回的1。
解决:
查阅了文档发现
os.system()的返回为:
On Unix, the return value is the exit status of the process encoded in
the format specified for wait().
而os.wait()的返回为:
a 16-bit number, whose low byte is the signal number that killed the
process, and whose high byte is the exit status (if the signal number
is zero);
os.system的返回值并不是执行程序的返回结果。而是一个16位的数,它的高位才是返回码。也就是说os.system()返回256即0×0100,返回码应该是其高位0×01即1。

测试了如果ping 过去返回的值是0表示是正常的,否则就是不正常的!
那我们的方法就可以写成如下的:

阅读(1623) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~