任务

  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. 使用Auto Layout中的VFL(Visual format language)——代码实现自动布局

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:api介绍 1.NSLayoutConstraint API NSL ...

  2. 为什么在属性中设置private set

    引言: 属性的引入来自C#的封装机制,也就是说对象的内部数据不应该由对象实例来直接访问,我们可以使用传统的Get和Set方法,来封装字段,C#为我们提供了语法糖,也就是属性.属性包括get和set,分 ...

  3. Oracle中exit,return,continue

    记录exit和return的用法 exit用来跳出循环 loop IF V_KBP IS NULL THEN           EXIT;    END IF; end loop; return跳出 ...

  4. PHP include和require 区别

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

  5. 【Dijstra堆优化】HDU 3986 Harry Potter and the Final Battle

    http://acm.hdu.edu.cn/showproblem.php?pid=3986 [题意] 给定一个有重边的无向图,T=20,n<=1000,m<=5000 删去一条边,使得1 ...

  6. MT6755 使用R63350 IC 出现唤醒概率性闪白,并导致ESD FAIL

    现象描述. 手机自动灭屏后按power键或home 键点亮屏幕,概率性上方有白色的一道,还会闪两三下屏.使用的LCM IC是:r63350, (FHD VDO)屏,附件为mtklog看看是什么原因? ...

  7. hdu 4043 FXTZ II [ 概率 + Java大数]

    传送门 FXTZ II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. PHP中的魔术方法【转载】

    __construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, _ ...

  9. MySQL基础架构

    前段时间订阅了<Mysql实战45讲>(从原理到实战),新的一年为自己充充电.对于这部分内容,我所知道的只来源于我大学里学习的课程<数据库原理>,在大学里学习的只是简单的查询, ...

  10. (转)Redis

    Rdis和JQuery一样是纯粹为应用而产生的,这里记录的是在CentOS 5.7上学习入门文章: 1.Redis简介 Redis是 一个key-value存储系统.和Memcached类似,但是解决 ...