Python面试高频问题: os.system()和os.popen()的区别-程序员宅基地

技术标签: python  Python  

 

os.system()和os.popen()概述

大家搞python与操作系统交互时,必须掌握的两个方法就是os.system()和os.popen(),也是在相关技术领域面试中必问的题目!本文就对这两个命令进行详细介绍,os.system()和os.popen()都可以执行shell命令,但是他们还是有一定的区别的。

话不多说,先拿实例说事儿!

目录/opt/scripts/test 中包括文件:ClassDemo2.groovy ClassDemo.groovy Demo3.groovy pyscript.py

我们执行os.system命令:

>>> os.system('cd /opt/scripts/test;ls')
ClassDemo2.groovy ClassDemo.groovy Demo3.groovy pyscript.py
0

这里的0表示执行成功

接下来再看os.popen命令:

>>> os.popen('cd /opt/scripts/test;ls')
<open file 'cd /opt/scripts/test;ls', mode 'r' at 0x7fa7dd7d1660>

如果想看到具体的值,可以这样使用

>>> f=os.popen('cd /opt/scripts/test;ls')
>>> print(f.readlines())
['ClassDemo2.groovy\n', 'ClassDemo.groovy\n', 'Demo3.groovy\n', ,'pyscript.py\n']

注意如果连续执行多条语句可以使用“;”分割,实例中的cd /opt/scripts/test;ls 就是相关应用。

具体细节如下:

1. 命令被分号“;”分隔,这些命令会顺序执行下去;

2. 命令被“&&”分隔,这些命令会顺序执行下去,遇到执行错误的命令停止;

3. 命令被双竖线“||”分隔,这些命令会顺序执行下去,遇到执行成功的命令停止,后面的所有命令都将不会执行;

os.system细节

os.system方法是os模块最基础的方法,其它的方法一般在该方法基础上封装完成。返回的是退出状态码。os的system原理是每一条system函数执行时,通过当前 Shell 启动的一个新的子进程或子 Shell 被称为 SubShell (子 Shell )。子 Shell 会自动继承父 Shell 的很多环境,如环境变量、工作目录、文件描述符等,但是反之,子 Shell 中的环境仅在子 Shell 中有效,父 Shell 无法读取子 Shell 的环境。例如,如果在父 shell 里定义全局变量,子 shell 中就可以调用该变量。但当在子 shell 中定义一个局部变量时,父 shell 是无法读取该变量的。

os.popen细节

os.popen() 方法用于从一个命令打开一个管道,返回的是命令的输出结果。从这个命令获取的值可以继续被使用。因为它返回一个文件对象,可以对这个文件对象进行相关的操作。

popen()方法语法格式:

os.popen(command[, mode[, bufsize]])

参数:

command -- 使用的命令

mode -- 模式权限可以是 'r'(默认) 或 'w'。

bufsize -- 指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位)。负的bufsize意味着使用系统的默认值,一般来说,对于终端设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。

返回值:

返回一个文件描述符号为fd(文件索引)的打开的文件对象

二者使用总结

如果要直接看到运行结果的话,应该使用os.system;如果需要获取返回值做进一步的处理则使用os.popen

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liwenxiang629/article/details/125187306

智能推荐

CentOS7.5x64bit安装MongoDB-Community-4.0.4-程序员宅基地

文章浏览阅读226次。记录Centos7下安装MongoDB4.0.4全过程,解决安装痛点。(1)安装前准备: 系统环境:TencentOSS-centos7.5x64bit,MongoDB4.0.4; https://www.mongodb.com/download-center/community https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.4.tgz...

IntelliJ IDEA log.info 报红如何解决?_idea中log报红-程序员宅基地

文章浏览阅读1.4w次,点赞9次,收藏10次。解决办法:-------> lombok插件安装我们经常用log.info来打印信息,明明自己引入了jar包,可为什么报错呢?那么请给工具安装lombok插件,才可正常使用。1.左上角,找到File–>Settings2.弹出的窗口,找到Plugins–>Browse repositories…3.点开Browse repositories… 输入 lombok..._idea中log报红

java控制台进度_java进度条:控制台输出百分比示例代码-程序员宅基地

文章浏览阅读961次。System.out.print("\b") 会在控制台下往回删掉一个字符,如果你想回删多个字符就打印多个 "\b"这个代码也可以参考一下:public static void main(String[] args) throws Except2021-01-27 20:52:16思路分析:因为既要有操作面板又要有进度条,所以肯定要出现两个继承JFrame类的窗体。先看被调用的进度条窗体,它不需要..._java 打印进度条的依赖

用jk触发器构成二分频电路_常见时序逻辑电路及设计——用FPGA学习数字电路本周课程预告...-程序员宅基地

文章浏览阅读844次。首先让我们一起来复习下罗亮老师前几周课程讲述的内容:数制及各种数制直接的转换;反码、补码和常见编码的讲述;布尔代数、逻辑函数的描述方法及转换、Verilog HDL代码结构;逻辑函数的标准形式和卡诺图;组合逻辑的介绍与分析;时序逻辑电路的分析。这些内容都是数字电路的基础内容,不知你掌握了没有?由于疫情原因目前大家都是通过上网课的形式来学习。俗话说:“玉瓷之石,金刚试之”,所以开学后罗老师..._用两个jk触发器设计一个电路,并画出逻辑图。 已知其状态转换图如下: 排列:

毕业设计:基于深度学习的手语识别系统 目标检测_手语识别系统毕业设计-程序员宅基地

文章浏览阅读912次,点赞14次,收藏26次。毕业设计:基于深度学习的手语识别系统利用深度学习算法和计算机视觉技术,将手语动作转化为文本或语音,实现手语与自然语言的转换和交流。本文详细介绍了系统的设计原理和关键技术,包括手势特征提取、深度神经网络模型构建和训练等。通过实验验证了系统在手语识别准确度和实时性方面的优势。该系统为听力障碍人士与非手语使用者之间的交流提供了一种便捷、高效的方式,具有广阔的应用前景。无论您对深度学习技术保持浓厚兴趣,还是希望探索机器学习、算法或人工智能的领域的同学,能为您提供灵感和指导。_手语识别系统毕业设计

Ansys SCDM基本操作_spaceclaim选择内部面-程序员宅基地

文章浏览阅读4.3k次。ANSYS SCDM_spaceclaim选择内部面

随便推点

字节 算法 面试,2024最新 计算机毕业设计项目推荐(源码(1),大佬分享开发经验-程序员宅基地

文章浏览阅读694次,点赞10次,收藏8次。这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

【交换机路由命令】常用的交换机配置命令及路由器配置命令(软考常考知识点)_交换机配置路由器命令-程序员宅基地

文章浏览阅读3.8k次,点赞2次,收藏20次。交换机配置命令汇总,路由器配置命令汇总,常用的交换机配置命令及路由器配置命令,软考常见命令汇总_交换机配置路由器命令

IBASE component deletion_comp delete-程序员宅基地

文章浏览阅读372次。Created by Jerry Wang, last modified on Oct 18, 2014在使用FM CRM_IBASE_COMP_DELETE删除一个IBASE component时(使用下列report 测试),通过ST05 trace能发现component deletion不包含物理的Database 删除动作,仅仅是把相关的IBASE数据的va..._comp delete

flutter 实战天猫首页案例_天猫首页实战-程序员宅基地

文章浏览阅读717次。效果图:GitHub Flutter学习源码:https://github.com/shunyue1320/flutter-studyappbar代码:appBar: AppBar( centerTitle: true, //elevation: 0, //bar底部阴影 leading: IconButton( highlightColor: Colors.transpar..._天猫首页实战

ORACLE HANDBOOK系列之八:VPD-程序员宅基地

文章浏览阅读43次。VPD,Oracle Virtual Private Database,即【Oracle虚拟专用数据库】,通过应用一些策略,使得用户只能访问被允许访问的那部分数据。其原理相对简单,Oracle根据策略自动为相应用户提交的语句添加Where句,从而控制用户可以访问和操作的数据。首先我们准备演示用的几张表,并插入少量的测试数据:CREATETABLEvpdsample_...

curl ajax 区别,Curl: RE: Curl and Ajax-程序员宅基地

文章浏览阅读172次。Date: Tue, 12 May 2009 15:48:13 +0000Hello,Thank you for quick reply.Login script ;$cookie_file_path = "/home/xxxxx/public_html/cookie.txt";$fp = fopen($cookie_file_path,'wb');fclose($fp);$agent = "Mo..._curl请求和ajx请求的区别

推荐文章

热门文章

相关标签