Python面试之os.system()和os.popen()的区别详析

作者:测试开发Kevin 时间:2023-09-14 18:15:39 

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']

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

具体细节如下:

1. 命令被分号&ldquo;;&rdquo;分隔,这些命令会顺序执行下去;

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

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

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

来源:https://blog.csdn.net/liwenxiang629/article/details/125187306

标签:python,os.system(),os.popen()
0
投稿

猜你喜欢

  • VScode查看python f.write()的文件乱码问题及解决方法

    2023-01-25 19:02:10
  • Python求解排列中的逆序数个数实例

    2021-07-28 15:17:27
  • Python partial函数原理及用法解析

    2021-01-22 02:48:50
  • Python使用Py2neo创建Neo4j的节点和关系

    2023-07-20 02:51:45
  • Python操作mongodb的9个步骤

    2023-03-11 15:37:53
  • 浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")

    2024-01-21 23:08:48
  • Python drop()删除行列的操作方法

    2022-10-27 17:12:41
  • 浅谈Python中的bs4基础

    2022-11-05 16:57:47
  • python docx的超链接网址和链接文本操作

    2021-06-05 22:10:55
  • css行高:line-height属性详解

    2008-06-24 11:42:00
  • 举例讲解Python中metaclass元类的创建与使用

    2023-12-11 23:06:57
  • SQL Report Builder 报表里面的常见问题分析

    2024-01-23 19:10:47
  • php 常用类整理

    2024-05-09 14:46:57
  • SQL中笛卡尔积的实际应用

    2024-01-27 14:18:21
  • 使用Python读取大文件的方法

    2022-02-18 00:43:35
  • 零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版

    2022-12-20 08:32:42
  • python实现微信远程控制电脑

    2023-07-07 07:43:43
  • python虚拟环境的安装配置图文教程

    2023-09-23 09:03:04
  • SQL 外链接操作小结 inner join left join right join

    2024-01-19 21:06:39
  • 不安全的js写法

    2009-09-16 14:26:00
  • asp之家 网络编程 m.aspxhome.com