任务

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

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")
'\r\n正在 Ping 192.168.1.1 具有 32 字节的数据:\r\n来自 192.168.1.1 的回复: 字节=
32 时间<1ms TTL=64\r\n来自 192.168.1.1 的回复: 字节=32 时间<1ms TTL=64\r\n来自 1
92.168.1.1 的回复: 字节=32 时间<1ms TTL=64\r\n来自 192.168.1.1 的回复: 字节=32
时间<1ms TTL=64\r\n\r\n192.168.1.1 的 Ping 统计信息:\r\n 数据包: 已发送 = 4,
已接收 = 4,丢失 = 0 (0% 丢失),\r\n往返行程的估计时间(以毫秒为单位):\r\n 最
短 = 0ms,最长 = 0ms,平均 = 0ms\r\n'
>>> a.returncode
0
>>>

Python的调用程序的更多相关文章

  1. Python基础笔记系列十四:python无缝调用c程序

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python语言可以对c程序代码进行调用,以弥补python语言低性能的缺 ...

  2. Python Module_subprocess_子进程(程序调用)

    目录 目录 前言 软件环境 认识subprocess Popen Constructor构造函数 Class Popen的参数 args 调用程序 调用Shell指令 stdinstdoutstder ...

  3. 4.1 python中调用rust程序

    概述 使用rust-cpython将rust程序做为python模块调用: 通常为了提高python的性能: 参考 https://github.com/dgrunwald/rust-cpython ...

  4. 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流

    最初的步骤 Python是大小写敏感的 任何在#符号右面的内容都是注释 >>> help('print')在“print”上使用引号,那样Python就可以理解我是希望获取关于“pr ...

  5. python 可调用对象之类实例

    可调用对象,即任何可以通过函数操作符()来调用的对象. python可调用对象大致可以分为4类: 1.函数 python中有三种函数:内建函数(BIFs).用户自定义函数(UDF).lambda表达式 ...

  6. 在python里调用java的py4j的使用方法

    py4j可以使python和java互调 py4j并不会开启jvm,需要先启动jvm server,然后再使用python的client去连接jvm GatewayServer实例:允许python程 ...

  7. python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

  8. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

  9. 使用ctypes在Python中调用C++动态库

    使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...

随机推荐

  1. IOI2008 Island 岛屿

    题目描述: bz luogu 题解: 裸的基环树直径. 代码: #include<queue> #include<cstdio> #include<cstring> ...

  2. MySQL丨02丨忘记root用户密码怎么办?

    软件:Mysql 版本:8.0.13 1. 先暂停mysql的服务,方法是在cmd里输入如下代码: net stop mysql 2. 在安装文件夹下创建一个文件:mysql-ini.txt (我的安 ...

  3. C#对象初始化的探讨

    最近在弄MQ的性能监测数据埋点,无疑中用到一个Nstatsd的客户端,看到里面写过里面一种嵌套类的写法.代码如下: 客户端Client是一个密封的类,并且构造函数私有访问.然后又用一个嵌套类Curre ...

  4. LeetCode(31) Next Permutation

    题目 Implement next permutation, which rearranges numbers into the lexicographically next greater perm ...

  5. 开门人和关门人(结构体+sort)

    每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人.    Input 测试输入的第一行给出记录的总天数N ( > ...

  6. 计蒜客 Overlapping Rectangles (离散化)

    题意: 给定一个坐标系, 给出n个矩形的左下角坐标(bx,by)和右上角坐标(tx,ty) , 求矩形覆盖的面积, 有些区域会被多个矩形覆盖, 但只用算一次. n <= 1000,  0 < ...

  7. 为应用指定多个struts配置文件

    在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿.为了避免struts.xml文件过于庞大.臃肿,提高struts.xml文件的可 ...

  8. python008 Python3 字符串

    var1 = 'Hello World!' var2 = "QQ603374730" Python 访问字符串中的值Python 不支持单字符类型,单字符也在Python也是作为一 ...

  9. XV6环境搭建及注意事项

    Ubuntu16.04SLT 64位 工具链 sudo apt-get install gcc-multilib libsdl1.2-dev, libtool-bin, libglib2.0-dev, ...

  10. 【ITOO 2】.NET 动态建库建表:使用SQL字符串拼接方式

    导读:在最近接手的项目(高效云平台)中,有一个需求是要当企业用户注册时,给其动态的新建一个库和表.刚开始接手的时候,是一点头绪都没有,然后查了一些资料,也问了问上一版本的师哥师姐,终于有了点头绪.目前 ...