Python学习基础笔记七十五——Python调用其他程序

Python经常被用来开发自动化程序。自动化程序往往需要调用其他的程序。

例如,我们可以代码中调用wget程序,而不是自己开发下载的代码。

这就是我们经常做的,在我们的Python程序中调佣其它程序,帮我们实现功能。

Python中调用外部程序,主要通过两个方法来实现,一个是os库的system函数另外一个是subprocess函数。

os.system函数:

下载wget的windows包。

在cmd中可以执行:

Python程序代码如下:

import oscmd = r'd:\tools\wget http://mirrors.sohu.com/nginx/nginx-1.13.9.zip'os.system(cmd)print('下载完毕')

代码说明:

有python程序,os.system这个有点类似Shell,windows中是cmd命令窗口,然后在shell里面再执行的cmd这段命令。命令里是wget程序。这个意思。

下载完成:

 

 然后,我们把这段代码进行更改:

让用户自己来指定版本:

import osnginx_version = input('请输入Nginx的指定版本:')
cmd = fr'd:\tools\wget http://mirrors.sohu.com/nginx/nginx-{nginx_version}.zip'os.system(cmd)print('下载完毕')

代码说明:

f说明字符串格式化方式。

r说明里面的\符号不进行转义。

 

这个程序运行的时候,一直要等到下载完毕,最后才打印出‘下载完毕’这句话来。

原来,os.system函数调用外部程序的时候,必须要等到被调用程序执行结束,才会接着往下执行代码,否则就会一直等待。

另外,os.system函数没法获取被调用程序输出到终端窗口的内容。如果需要对被调用程序的输出信息进行处理的话,可以使用subprocess模块。

例如,要获得计算机的内存大小的输出信息。

os.subprocess模块:

subprocess模块提供了更多的调用外部程序的功能。

首先,我们可以获得外部程序输出到屏幕的内容。这在自动化的时候,非常有用。可以用来判断外部程序执行结果是否成功,或者获取我们要分析的数据。

可以使用subprocess里面的Popen类。

C:\Windows\system32>fsutil volume diskfree c:
总可用字节数                :  68,709,957,632 ( 64.0 GB)
总字节数                     : 214,748,360,704 (200.0 GB)
总配额可用字节数          :  68,709,957,632 ( 64.0 GB)
不可用池字节数          :               0 (  0.0 KB)
配额不可用池字节数    :               0 (  0.0 KB)
已用字节数                      : 140,404,006,912 (130.8 GB)
总保留字节数            :   5,634,396,160 (  5.2 GB)
卷存储保留字节数   :   5,591,650,304 (  5.2 GB)
可用提交字节数       :               0 (  0.0 KB)
池可用字节数            :               0 (  0.0 KB)

 人家有现成的程序,我们只要把这个程序工具的结果信息拿过来,得到结果,然后进行处理。

from subprocess import PIPE, Popen# 返回的是 Popen 实例对象
proc = Popen('fsutil volume diskfree c:',stdin  = None,stdout = PIPE,stderr = PIPE,shell=True)# communicate 方法返回 输出到 标准输出 和 标准错误 的字节串内容
# 标准输出设备和 标准错误设备 当前都是本终端设备
outinfo, errinfo = proc.communicate()# 注意返回的内容是bytes 不是 str ,我的是中文windows,所以用gbk解码
outinfo = outinfo.decode('gbk')
errinfo = errinfo.decode('gbk')
print (outinfo)
print ('-------------')
print (errinfo)outputList = outinfo.splitlines()# 剩余量
free  = int(outputList[0].split(':')[1].replace(',','').split('(')[0].strip())# 总空间
total = int(outputList[1].split(':')[1].replace(',','').split('(')[0].strip())if (free/total < 0.1):print('!! 剩余空间告急!!')
else:print('剩余空间足够')

代码说明:

shell=True,通过shell执行fsutil命令。

如果,我们要获取到程序输出到终端的内容,我们需要指定stdout=PIPE,PIPE是一个变量,这个值是-1,PIPE是一个管道。这个管道,我们可以通过PIPE读取出来。

communicate 方法返回输出到标准输出和标准错误的字节串内容。

注意是字节串内容bytes,那说明这个字节串内容需要解码,因为是windows操作系统,所以需要使用gbk来进行解码,然后才能转到字符串内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

危险化工品出口注意事项及法规要求_箱讯科技

随着全球化工品市场的不断发展&#xff0c;危险化工品出口业务逐渐成为国际贸易的重要组成部分。然而&#xff0c;由于危险化工品具有潜在的危险性&#xff0c;出口过程中需严格遵守相关法规和注意事项&#xff0c;以确保运输安全和顺畅。本文将详细介绍危险化工品出口注意事项…

Linux | vim的入门手册

目录 前言 一、什么是vim 二、vim编辑器的模式 1、插入模式 &#xff08;1&#xff09;用vim打开文件 &#xff08;2&#xff09;进入插入模式 2、默认模式 &#xff08;1&#xff09;光标移动 &#xff08;2&#xff09;复制、粘贴与剪切操作 &#xff08;3&#x…

UE4中无法保存项目问题

系列文章目录 文章目录 系列文章目录前言一、解决方法 前言 取消&#xff1a;停止保存所有资产并返回编辑器。 重试&#xff1a;尝试再次保存资产。 继续&#xff1a;仅跳过保存该资产。 当我点击继续时&#xff0c;关闭项目&#xff0c;然后重新打开项目&#xff0c;发现之前…

广州虚拟动力携数字人全栈式产品,邀您来2023世界VR产业大会(南昌)一探虚实

2023年10月19-20日&#xff0c;由工业和信息化部、江西省人民政府联合主办&#xff0c;中国电子信息产业发展研究院、江西省工业和信息化厅、南昌市人民政府、虚拟现实产业联盟共同承办的2023世界VR产业大会将在南昌绿地国际博览中心盛大举办。 广州虚拟动力作为3D、AI虚拟人领…

guzzle http/guzzle如何在鉴权中使用,如何使用异步操作?

Guzzle HTTP客户端库提供了多种方式来进行鉴权&#xff0c;并且支持异步操作。以下是如何在Guzzle中执行鉴权和使用异步操作的示例&#xff1a; 1. 基本鉴权 Guzzle支持基本的HTTP基本认证&#xff08;Basic Authentication&#xff09;鉴权。您可以使用auth选项来指定用户名…

Syntax Error: Error: PostCSS received undefined instead of CSS string (已解决)

错误版本 "node-sass": "^5.0.0" "sass-loader": "^10.1.0" 解决办法如下&#xff1a; 这是因为node-sass 和 sass-loader版本不适配导致&#xff0c;请安装如下版本&#xff0c;并且运行如下命令&#xff1a; "node-sass":…

kafka_2.10启动Kafka broker

要启动 Kafka broker&#xff0c;你需要执行以下步骤&#xff1a; 首先&#xff0c;确保你已经安装了 Kafka。你可以从 Apache Kafka 的官方网站下载 Kafka 的二进制发行版&#xff0c;并按照官方文档中的说明进行安装。 在安装完成后&#xff0c;进入 Kafka 的安装目录。 打…

Junit 集成测试

前言 现在作者说明一下&#xff0c;作者需要开发一个简单的VueSpringboot前后端分离实验&#xff0c;想要尽量将测试的流程应用到这样的系统中。单元测试请见Junit单元测试_Joy T的博客-CSDN博客&#xff0c;而单元测试加上mock呢&#xff0c;最多也只能测试一下Service层的业…

React之受控组件和非受控组件以及高阶组件

一、受控组件 受控组件&#xff0c;简单来讲&#xff0c;就是受我们控制的组件&#xff0c;组件的状态全程响应外部数据 举个简单的例子&#xff1a; class TestComponent extends React.Component {constructor (props) {super(props);this.state { username: lindaidai }…

uniapp在App端如何动态修改原生导航栏?

uniapp在App端如何动态修改原生导航栏&#xff1f; 文章目录 uniapp在App端如何动态修改原生导航栏&#xff1f;page.json配置修改 buttons 文字修改按钮上的角标设置 searchInput的 focus设置 searchInput的 text 在App端可以通过得到 webview 对象&#xff0c;通过当前 webvi…

VSCode 调试 u-boot

文章目录 VSCode 调试 u-boot调试配置启动 u-boot 脚本调试界面重定向之后继续调试参考 VSCode 调试 u-boot 调试配置 参考 qemu基础篇——VSCode 配置 GDB 调试 要想调试 u-boot 只需要再添加一个 u-boot 的配置即可 {"version": "0.2.0","conf…

Flutter ☞ 常量

常量 只能被定义一次&#xff0c;并且不可修改的值叫做常量。 在 Flutter 中有两种常量修饰方法 finalconst 相同点 类型声明可以省略 final String a 123; final a 123;const String a 123; const a 123;初始化后不能再赋值 final a 123; a abc; // 错误const a …

Docker-compose和Consul

目录 1、docker-compose 简介 1.1 Docker-compose 简介 2、compose 部署 2.1 Docker Compose 环境安装 2.2 YAML 文件格式及编写注意事项 * * * * 2.3 Docker Compose配置常用字段 2.4 Docker Compose 常用命令 2.5 Docker Compose 文件结构 3、Consul 3.1 什么是…

SkyWalking 告警规则配置说明

Skywalking告警功能是在6.x版本新增的,其核心由一组规则驱动,这些规则定义在config/alarm-settings.yml 文件中。告警规则定义分为两部分: 1、告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件 2、webhook(网络钩子):定义当告警触发时,哪些服务终端需要被…

unity变体收集工具

项目目录:D:\GIT\YooAsset\Temp 收集代码: using System.Collections; using System.Collections.Generic; using UnityEditor; #if UNITY_EDITOR using UnityEditor.Build; using UnityEditor.Rendering; #if UNITY_2019_4_OR_NEWER using UnityEditor.Build.Pipeline…

学习笔记|串口通信实战|简易串口控制器|sprintf函数|STC32G单片机视频开发教程(冲哥)|第二十一集(下):串口与PC通信

目录 3.串口通信实战实操简易的工作原理Tips:sprintf函数简介 总结课后练习 3.串口通信实战 做一个简易串口控制器。发送对应指令&#xff0c;让板子做相应的事情&#xff0c;或者传输数据&#xff08;文本模式下发送&#xff0c;不要选择HEX&#xff09;。 1.串口发送字符Ax\…

2020年亚太杯APMCM数学建模大赛B题美国总统的经济影响分析求解全过程文档及程序

2020年亚太杯APMCM数学建模大赛 B题 美国总统的经济影响分析 原题再现&#xff1a; 美国总统选举每四年举行一次。 2020年是美国总统大选年&#xff0c;共和党候选人唐纳德特朗普和民主党对手乔拜登竞选总统。 甲乙双方候选人在金融贸易&#xff0c;经济金融治理&#xff0c;…

云计算系统与传统计算系统的比较

随着技术的不断发展&#xff0c;云计算系统逐渐成为了企业和个人使用的主要计算方式之一。然而&#xff0c;很多人对云计算系统与传统计算系统之间的区别和相似之处还存在一些疑惑。本文将以云计算系统和传统计算系统为方向&#xff0c;探讨它们之间的异同点。 首先&#xff0…

python爬虫实战-京东商品数据

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 今天介绍一下如何用 Python 来批量获取京东商品信息&#xff01;&#xff01; 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 第三方库: requests >>> pip install requests 开发环境: python 3.8 py…

【iOS】——用单例类封装网络请求

文章目录 一、JSONModel1.JSONModel的简单介绍2.JSONModel的使用 二、单例类和Block传值 一、JSONModel 1.JSONModel的简单介绍 JSONModel一个第三方库&#xff0c;这个库用来将网络请求到的JSON格式的数据转化成Foundation框架下的Model类的属性&#xff0c;这样我们就可以直…