Python面试高频问题: os.system()和os.popen()的区别

 

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

  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
`os.system`、`os.popen`和`subprocess.Popen`都是用于在Python程序中调用系统命令的函数,但是它们在用法和功能上有所不同。 1. `os.system` `os.system`函数用于在操作系统中执行命令,并返回执行结果。它的使用方法是: ```python import os os.system('command') ``` 其中,`command`是要执行的命令,可以是任何在操作系统中可执行的命令。`os.system`函数将返回命令的退出状态码,通常情况下,0表示执行成功,其他值表示执行失败。 2. `os.popen` `os.popen`函数用于在操作系统中执行命令,并返回命令的输出。它的使用方法是: ```python import os output = os.popen('command').read() ``` 其中,`command`是要执行的命令,`output`是命令的输出结果,它是一个字符串类型的变量。`os.popen`函数将执行命令,并将命令的输出保存到`output`中。 3. `subprocess.Popen` `subprocess.Popen`函数也用于在操作系统中执行命令,但是它提供了更丰富的控制和选项。它的使用方法是: ```python import subprocess p = subprocess.Popen('command', stdout=subprocess.PIPE, shell=True) output, errors = p.communicate() ``` 其中,`command`是要执行的命令,`stdout=subprocess.PIPE`表示将命令的输出保存到`output`中,`shell=True`表示可以执行shell命令。`subprocess.Popen`函数将执行命令,并返回一个Popen对象,通过Popen对象可以控制命令的执行和获取命令的输出。 以上是三种调用系统命令的方法的区别和用法。总体来说,`os.system`函数用于简单的命令调用,`os.popen`函数用于获取命令的输出,`subprocess.Popen`函数用于更复杂的命令调用和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值