os.system()和os.popen()怎样使用,有哪些细节
Admin 2022-08-11 群英技术资讯 505 次浏览
大家搞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模块最基础的方法,其它的方法一般在该方法基础上封装完成。返回的是退出状态码。os的system原理是每一条system函数执行时,通过当前 Shell 启动的一个新的子进程或子 Shell 被称为 SubShell (子 Shell )。子 Shell 会自动继承父 Shell 的很多环境,如环境变量、工作目录、文件描述符等,但是反之,子 Shell 中的环境仅在子 Shell 中有效,父 Shell 无法读取子 Shell 的环境。例如,如果在父 shell 里定义全局变量,子 shell 中就可以调用该变量。但当在子 shell 中定义一个局部变量时,父 shell 是无法读取该变量的。
os.popen() 方法用于从一个命令打开一个管道,返回的是命令的输出结果。从这个命令获取的值可以继续被使用。因为它返回一个文件对象,可以对这个文件对象进行相关的操作。
popen()方法语法格式:
os.popen(command[, mode[, bufsize]])
参数:
command -- 使用的命令
mode -- 模式权限可以是 'r'(默认) 或 'w'。
bufsize -- 指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位)。负的bufsize意味着使用系统的默认值,一般来说,对于终端设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。
返回值:
返回一个文件描述符号为fd(文件索引)的打开的文件对象
如果要直接看到运行结果的话,应该使用os.system;如果需要获取返回值做进一步的处理则使用os.popen
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,在线性回归分析中,只包括一个自变量和一个因变量,且二者的关系
Python的运算符和其他语言类似(我们暂时只了解这些运算符的基本用法,方便我们展开后面的内容,高级应用暂时不介绍)数学运算>>>print1+9
由于矢量图层文件较多,手动发布费时费力,python支持的关于geoserver包又由于年久失修,无法在较新的geoserver版本中正常使用。本文为大家准备了Python自动化发布矢量文件的代码,需要的可以参考一下
这篇文章主要介绍了python中的代码运行时间获取方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
prefetch_related()和select_related()的设计目的很相似,都是为了减少SQL查询的数量,但是实现的方式不一样,下面这篇文章主要给大家介绍了关于Django中QuerySet查询优化之prefetch_related的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008