当前位置: 首页 > news >正文

执行python代码的方式_用Python执行程序的4种方式,编程必备

在编写代码中,经常会遇到在 Python程序中打开外部程序的需求,那么在Python里如何打开外部程序呢?今天我们来介绍四种不同的方式,供大家参考收藏。

使用 os.system()

os.system(command)是最简单的一种方式,我们import os模块,并调用它的system() 方法即可。

参考以下例子:

62bbf7b96059ac6a5b1ee2cb3076d5de.jpeg-wh_651x-s_1776208960.jpeg

通过简单两行代码即可在我的电脑上打开 qq程序,因为我是在MacOS 系统里,所以需要在可执行文件之前加一个open,如果是 windows只需要填写可执行文件的绝对路径即可。

现在我们可以调用稍微复杂一点的命令,实现在 Python中调用ping命令:

c7e0937cd284e14750857df03b1820ca.jpeg

不过os.system()的缺点是无法获取调用后的返回结果,只能通过:

os.system("ping www.baidu.com > result.txt") 这样的方式把结果管道输出到本地文件里。

system的返回值只会有0(成功),1和2表示失败。

总结起来 system()一共干了三件事情:

从主进程中fork一个子进程。

在子进程中调用python的exec函数去执行命令。

在主进程中调用wait(阻塞)等待子进程结束。

如果 对于fork失败,system()函数返回-1。

使用 os.popen()

os.popen(command) 的调用方式和os.system()类似,不过它是通过创建一个管道的方式来fork子进程实现调用程序的。

35d4f01ffe1cd3cb2ece8f48046697b4.jpeg

我们可以通过读取popen的返回对象,以便获取执行结果。

以上代码我们可以发现对返回对象执行read()方法即可获取程序执行后的返回结果。

使用 subprocess.open()

subprocess这个模块在Python用于产生子进程,可以连接子进程的标准输入输出,并且可以得到子进程的返回值。

以下是subprocess.Popen()模块的参数定义:

d58346fa9ad2bc7d1920d4dee4239f6f.jpeg

subprocess.Popen() 的参数解释:

0d304b4d0c6288fb7319dd6366636bfa.jpeg

以下通过subprocess.Popen() 执行tree命令,树形结构显示当前程序路径下的所有文件和目录:

f1285eb3ca4427646a9f2ce1f2fc35b8.jpeg

Popen的参数可以是字符串(string),也可以是列表(list)。

参考两个以下例子:

subprocess.Popen(["cat","test.md"])

subprocess.Popen("cat test.txt", shell=True)

Popen()还有更多的高级用法,欢迎参考官方文档进行学习。

使用subprocess.call()

subporcess模块还有一个call() 方法,可以用于更加简单的调用外部命令。

subprocess.call (*popenargs , **kwargs )

call的使用方法和Popen基本一致,没有太大的区别,在这里只是多介绍一种使用方式。

3caa3671cbb5ce9f819642f172ffb9ba.jpeg

总结:

os.system()用于简单执行命令,可以显示执行结果。

os.popen()用于简单执行命令,不能显示执行结果,可以通过变量返回执行结果。

subprocess.Popen() 用于执行复杂命令,可以显示执行结果,可以设置输出内容。

subprocess.call() 用于执行复杂命令,可以显示执行结果,可以设置输出内容。

【编辑推荐】

【责任编辑:赵宁宁 TEL:(010)68476606】

点赞 0

相关文章:

  • WPS怎么统计相同名称的数据_教你如何将垃圾的WPS,玩得高大上!
  • vue radio双向绑定_Vue双向数据绑定,时间介绍,ref获取dom节点
  • 抓包实时打印_【硬货分享】 某网红打印机安全分析(下)
  • import pandas as pd 报错_Python数据处理,用pandas解决分段匹配,简单到没朋友
  • cricheditview实现语法高亮和行号_[源码和文档分享]基于VC++和QT实现的图的可视化工具...
  • table 内 下拉列表 被遮挡_Emacs Hack - 通过列表数据创建表格
  • 取出url中的字符_python爬虫,解决大众点评字符库反爬机制的经验
  • 单调有界定理适用于函数吗_实数系的连续性定理
  • java map获取第一个值_深入理解 Java 函数式编程(4): 使用 Vavr 进行函数式编程...
  • 层次聚类算法_聚类分析算法
  • centos如何复制粘贴_教你Vim编辑器,如何删除一行或者多行内容
  • java更改模块状态_2020年4月Github上最热门的Java开源项目
  • 佳能g3800故障灯说明书_啄木鸟家庭维修|天花机故障灯闪什么问题
  • 曲面积分的投影法_第二型曲面积分的投影法与对称性
  • python常用包及主要功能_python常用包及功能介绍
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 07.Android之多媒体问题
  • ES2017异步函数现已正式可用
  • Git学习与使用心得(1)—— 初始化
  • JavaScript设计模式系列一:工厂模式
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • React-flux杂记
  • Solarized Scheme
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 第2章 网络文档
  • 对JS继承的一点思考
  • 实战|智能家居行业移动应用性能分析
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • UI设计初学者应该如何入门?
  • "无招胜有招"nbsp;史上最全的互…
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • . NET自动找可写目录
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core 版本不支持的问题
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET/C# 使用反射注册事件
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .netcore 获取appsettings
  • .NET和.COM和.CN域名区别
  • @TableLogic注解说明,以及对增删改查的影响
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [C#]扩展方法
  • [Gamma]阶段测试报告
  • [HNOI2018]排列
  • [IOI2007 D1T1]Miners 矿工配餐
  • [javaSE] GUI(Action事件)
  • [LeetBook]【学习日记】获取子字符串 + 颠倒子字符串顺序
  • [msg_msg] corCTF2021 -- fire_of_salvation
  • [P4V]Perforce(P4V)使用教程
  • [POJ3067]Japan