有关os.popen易忽略的知识点梳理
admin
2023-07-16 15:42:44
0次

这篇文章主要介绍了在python中关于os.popen易忽略的知识点梳理,具有一定借鉴价值,需要的朋友可以参考下。如下资料是关于有关os.popen易忽略的知识点梳理内容。

一 前言

使用python执行一些命令或调用第三方工具是比较常见的情况,实现的方法也很多,如os.system(),os.popen()、subprocess模块中的函数等等,本文主要介绍一下os.popen(),可能隐藏着你不曾接触的知识点,同时会结合实例进行说明,便于理解。

 

二 语法格式

首先我们看下os.popen的语法格式,如下:

os.popen(cmd, mode='r', buffering=-1)

 

参数说明:

Command --- 调用的命令;

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

bufsize -- 指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位);负的bufsize意味着使用系统的默认值。

 

官方释义:

Open a pipe to or from command cmd. The return value is an open file object connected to the pipe, which can be read or written depending on whether mode is 'r' (default) or 'w'.

从命令cmd打开一个管道,返回值是连接管道的文件对象,通过该对象可以进行读或写。

 

三 知识点梳理

 

1.  返回值是文件对象

注意:返回值是文件对象,既然是文件对象,使用完就应该关闭,对吧?!不信网上搜一下,一大把文章提到这个os.popen都是忘记关闭文件对象的。 所以,推荐的写法是:

  with os.popen(command, "r") as p:
    r = p.read()


     至于with的用法就不多讲了,使用它,不需要显式的写p.close()。

 

2.  非阻塞

通俗的讲,非阻塞就是os.popen不会等cmd命令执行完毕就继续下面的代码了,不信?!看下面代码实例:

有关os.popen易忽略的知识点梳理

从上面实例可知,os.popen执行打开Uedit32.exe这个工具,但从实际执行结果看,Uedit32.exe还没打开,就直接进入了下一条语句,打印了“hello 小蟒社区”。在某些应用场景,可能这并不是你期望的行为,那如何让命令执行完后,再执行下一句呢?

处理方法是使用read()或readlines()对命令的执行结果进行读操作。

 

3.  完全阻塞

上面写了该函数是非阻塞的,现在怎么又变成完全阻塞的呢?感觉一头雾水了吧。本质上os.popen是非阻塞的,为了实现阻塞的效果,我们使用read()或readlines()对命令结果进行读,由此产生了阻塞的效果。但是,如果你的命令执行无法退出或进入交互模式,这种“读”将形成完全阻塞的情况,表现的像程序卡住了。

看下面代码实例1:

有关os.popen易忽略的知识点梳理

os.popen执行了ping  127.0.0.1  -t 该命令会一直执行,除非CTRL+C强制退出,因而,执行readlines读取命令输出时会造成卡住。

 

代码实例2:

使用os.popen执行sqlplus命令对数据库进行操作的场景,如果sqlplus执行失败,会进入交互模式,如图所示,此时使用readlines()读取执行结果时也会卡死,效果如上图:

有关os.popen易忽略的知识点梳理

 

四 总结

os.popen()在大多数场景都是挺好用方便的,但是也有坑!! 具体应用中,需要注意下。

建议:

1.       在需要读取命令执行结果时,避免在命令无法退出或进入交互模式的场景应用os.popen;

2.       os.popen()无法满足需求时,可以考虑subprocess.Popen();

以上就是有关os.popen易忽略的知识点梳理,如果在日常工作遇到此问题,希望你能通过这篇文章解决问题。如果想了解更多相关内容,欢迎关注行业资讯频道!

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...