真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

有關(guān)os.popen易忽略的知識點(diǎn)梳理

這篇文章主要介紹了在python中關(guān)于os.popen易忽略的知識點(diǎn)梳理,具有一定借鑒價值,需要的朋友可以參考下。如下資料是關(guān)于有關(guān)os.popen易忽略的知識點(diǎn)梳理內(nèi)容。

創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務(wù),主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作手機(jī)APP定制開發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。創(chuàng)新互聯(lián)建站深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

一前言

使用python執(zhí)行一些命令或調(diào)用第三方工具是比較常見的情況,實(shí)現(xiàn)的方法也很多,如os.system(),os.popen()、subprocess模塊中的函數(shù)等等,本文主要介紹一下os.popen(),可能隱藏著你不曾接觸的知識點(diǎn),同時會結(jié)合實(shí)例進(jìn)行說明,便于理解。

 

二語法格式

首先我們看下os.popen的語法格式,如下:

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

 

參數(shù)說明:

Command --- 調(diào)用的命令;

mode --- 模式權(quán)限可以是 'r'(默認(rèn)) 或 'w';

bufsize -- 指明了文件需要的緩沖大?。?意味著無緩沖;1意味著行緩沖;其它正值表示使用參數(shù)大小的緩沖(大概值,以字節(jié)為單位);負(fù)的bufsize意味著使用系統(tǒng)的默認(rèn)值。

 

官方釋義:

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打開一個管道,返回值是連接管道的文件對象,通過該對象可以進(jìn)行讀或?qū)憽?/p>

 

三知識點(diǎn)梳理

 

1. 返回值是文件對象

注意:返回值是文件對象,既然是文件對象,使用完就應(yīng)該關(guān)閉,對吧?!不信網(wǎng)上搜一下,一大把文章提到這個os.popen都是忘記關(guān)閉文件對象的。 所以,推薦的寫法是:

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

     至于with的用法就不多講了,使用它,不需要顯式的寫p.close()。

 

2. 非阻塞

通俗的講,非阻塞就是os.popen不會等cmd命令執(zhí)行完畢就繼續(xù)下面的代碼了,不信?!看下面代碼實(shí)例:

有關(guān)os.popen易忽略的知識點(diǎn)梳理

從上面實(shí)例可知,os.popen執(zhí)行打開Uedit32.exe這個工具,但從實(shí)際執(zhí)行結(jié)果看,Uedit32.exe還沒打開,就直接進(jìn)入了下一條語句,打印了“hello 小蟒社區(qū)”。在某些應(yīng)用場景,可能這并不是你期望的行為,那如何讓命令執(zhí)行完后,再執(zhí)行下一句呢?

處理方法是使用read()或readlines()對命令的執(zhí)行結(jié)果進(jìn)行讀操作。

 

3. 完全阻塞

上面寫了該函數(shù)是非阻塞的,現(xiàn)在怎么又變成完全阻塞的呢?感覺一頭霧水了吧。本質(zhì)上os.popen是非阻塞的,為了實(shí)現(xiàn)阻塞的效果,我們使用read()或readlines()對命令結(jié)果進(jìn)行讀,由此產(chǎn)生了阻塞的效果。但是,如果你的命令執(zhí)行無法退出或進(jìn)入交互模式,這種“讀”將形成完全阻塞的情況,表現(xiàn)的像程序卡住了。

看下面代碼實(shí)例1:

有關(guān)os.popen易忽略的知識點(diǎn)梳理

os.popen執(zhí)行了ping  127.0.0.1  -t 該命令會一直執(zhí)行,除非CTRL+C強(qiáng)制退出,因而,執(zhí)行readlines讀取命令輸出時會造成卡住。

 

代碼實(shí)例2:

使用os.popen執(zhí)行sqlplus命令對數(shù)據(jù)庫進(jìn)行操作的場景,如果sqlplus執(zhí)行失敗,會進(jìn)入交互模式,如圖所示,此時使用readlines()讀取執(zhí)行結(jié)果時也會卡死,效果如上圖:

有關(guān)os.popen易忽略的知識點(diǎn)梳理

 

四總結(jié)

os.popen()在大多數(shù)場景都是挺好用方便的,但是也有坑!! 具體應(yīng)用中,需要注意下。

建議:

1.      在需要讀取命令執(zhí)行結(jié)果時,避免在命令無法退出或進(jìn)入交互模式的場景應(yīng)用os.popen;

2.      os.popen()無法滿足需求時,可以考慮subprocess.Popen();

以上就是有關(guān)os.popen易忽略的知識點(diǎn)梳理,如果在日常工作遇到此問題,希望你能通過這篇文章解決問題。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


文章名稱:有關(guān)os.popen易忽略的知識點(diǎn)梳理
URL分享:http://weahome.cn/article/gojiie.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部