python的调用_Python的调用程序

任务

调用系统命令ping 判断局域网内有哪些主机存活

假设你用c语言写了一个算法,需要对该算法进行测试。测试的数据集几百个。这时可以使用过GCC生成test.exe,再使用python批量调用该exe去测试数据集。

简而言之,就是python需要调用系统程序或者其他程序。

方法

os.system

os.popen

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

>>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值