免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1647 | 回复: 0
打印 上一主题 下一主题

python3实现windows下检查ip 的连通性 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-30 11:46 |只看该作者 |倒序浏览
本帖最后由 jwshxyd 于 2013-08-30 13:52 编辑

一段简单的代码,可测试本机与指定地址ip的主机的连通性
import os,sys,re
import subprocess

num=int(input('Enter an Integer:'))
#ip=str(input('Enter ip:'))
for i in range(1,3):
    ret=subprocess.call('ping 192.168.4.%d -n %d ' %(i,num),shell = True,stdout=open(r'D:\test_case\iptmp.txt','w'), stderr=subprocess.STDOUT)

    if ret == 0:
            print ("%d: is alive" % i)
    else:
            print ("%d is down" % i)

以上subprocess.call测试结果 4.1 ,4.2是可通的,4.2应该是不通的,但是代码运行结果显示都是 alive的,为何呢?
1 is alive
2 is alive

如果subprocess.Popen测试4.1,4.2都是不通的了
1 is down
2 is down
看来是返回的值不一样
查了下官方文档,看起来有点累,大致意思是 python3 的子进程模块subprocess 的存在是为了替换旧有的os.system,os.spawn* 等
subprocess.call
subprocess.call (*popenargs , **kwargs )
执行命令,并等待命令结束,再返回子进程的返回值。可查看/python33/Lib/subprocess.py
call(def call():) 是这样的:

def call(*popenargs, timeout=None, **kwargs):
    with Popen(*popenargs, **kwargs) as p:
        try:
            return p.wait(timeout=timeout)
        except:
            p.kill()
            p.wait()
            raise
关于Popen(class Popen(object)的用法
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

他们的返回值有何区别呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP