zoukankan      html  css  js  c++  java
  • Python的调用程序

    任务

    1. 调用系统命令ping 判断局域网内有哪些主机存活
    2. 假设你用c语言写了一个算法,需要对该算法进行测试。测试的数据集几百个。这时可以使用过GCC生成test.exe,再使用python批量调用该exe去测试数据集。 简而言之,就是python需要调用系统程序或者其他程序。

    方法

    1. os.system
    2. os.popen
    3. subprocess

    os.system

    假设有一个test.exe,返回值为0或者1.调用后,在窗口会显示test.exe中printf的信息,并且返回值为0或者1.调用系统进程类似。这个方法的缺点很明显,返回值中没有包含想要的内容,比如下面的ping结果。

    >>> os.system("ping 192.168.1.1")
    
    正在 Ping 192.168.1.1 具有 32 字节的数据:
    来自 192.168.1.1 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间<1ms TTL=64
    
    192.168.1.1 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 0ms,最长 = 0ms,平均 = 0ms
    0

    os.popen

    这个方法可以返回filelike的结果,使用文件的读方法可以得到有效信息,但是没有程序的返回值。

    >>> s = os.popen("ping 192.168.1.1")
    >>> s.read()
    '
    正在 Ping 192.168.1.1 具有 32 字节的数据:
    来自 192.168.1.1 的回复: 字节=32
    时间<1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间=4ms TTL=64
    来自 192.168.
    1.1 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间<1ms T
    TL=64
    
    192.168.1.1 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失
     = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 0ms,最长 = 4ms
    ,平均 = 1ms
    '
    >>>

    subprocess

    这个模块的功能比较强大,同时使用起来也比较复杂。官方说法是用来替代os.system的。在The Python Standard Library17.5章节。 基本上包含了上面两个方法的功能。

    import subprocess
    a = subprocess.run("ping 192.168.1.1",stdout=subprocess.PIPE)
    a.stdout.decode("gb2312")
    a.returncode
    

    上面的模块既可以返回程序(进程)的返回结果,又可以返回标准打印信息。

    >>> a.stdout.decode("gb2312")
    '
    正在 Ping 192.168.1.1 具有 32 字节的数据:
    来自 192.168.1.1 的回复: 字节=
    32 时间<1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32 时间<1ms TTL=64
    来自 1
    92.168.1.1 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.1.1 的回复: 字节=32
    时间<1ms TTL=64
    
    192.168.1.1 的 Ping 统计信息:
        数据包: 已发送 = 4,
    已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最
    短 = 0ms,最长 = 0ms,平均 = 0ms
    '
    >>> a.returncode
    0
    >>>
  • 相关阅读:
    【转】memcached分布式部署
    【转】分布式与集群的区别
    [转]memcached+magent实现memcached集群
    [转]Memcache的原理和命中率的总结
    [转]PHP SOCKET编程
    [转]Hive安装及使用攻略
    [转]Linux的SOCKET编程详解
    Git介绍
    [转]wget 下载整个网站,或者特定目录
    [转]五种常见的 PHP 设计模式
  • 原文地址:https://www.cnblogs.com/WeyneChen/p/6670635.html
Copyright © 2011-2022 走看看