python調用第三方工具(命令)的方法及區別

前言python

在上篇《關於os.popen你可能不知道的》中,提到了調用第三方工具或命令的os.popen方法,同時也指出了使用中可能遇到的坑。本文就介紹下python提供了哪些方法能夠執行第三方工具或命令,以及它們的用法和區別。web

 

主要方法shell

1.  os.system微信

這個應該是用法最簡單的方法了,os.system(「cmd」),直接傳入要執行的命令字符串便可。注意返回值,它的返回值不是執行命令的返回結果,若是命令執行成功,則返回0;不然,返回其餘值。另外,該方法是阻塞的,也就是說,只有調用的命令執行完畢返回後,纔會繼續運行後面的代碼行。session

 

2.  os.popenide

請參考《關於os.popen你可能不知道的》,再也不贅述。函數

 

3.  Subprocess.Popen工具

subprocess模塊是推薦的用來替換一些老的模塊和函數,如:os.systemos.popen等,定義了一個類Popen,使用Popen來建立進程,並與進程交互。學習

 

函數原型:spa

class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None)

 

參數解釋:

參數名

參數說明

args

字符串或列表

bufsize

0-無緩衝;1-行緩衝;其餘正值-緩衝區大小;負值-默認系統緩衝(通常全緩衝)

executable

通常不用,args字符串或列表第一項表示程序名

stdin

stdout

stderr

None-沒有重定向,繼承父進程

PIPE-建立管道

文件對象

文件描述符

stderr還可設置爲STDOUT

preexec_fn

鉤子函數,在forkexec之間執行(unix

close_fds

Unix下執行新進程前是否關閉0/1/2以外的文件;

Windows下是否繼承父進程的文件描述符

shell

若是設置爲True,則unix下至關於args前面加」/bin/sh」  「-c」;

Windows下至關於添加」cmd.exe  /c」

cmd

設置工做目錄

env

設置環境變量

universal_newlines

各類換行符統一處理成」\n」

startupinfo

Windows下傳遞給CreateProcess的結構體

creationflags

Windows下傳遞CREATE_NEW_CONSOLE建立本身的控制檯窗口

 

Popen提供的參數數量就能感知其功能強大,但使用Popen函數注意:若是運行cmd命令時產生內容很是多,而標準輸出使用subprocess提供的PIPE,輸出內容可能塞滿緩衝區,形成阻塞。通常的解決方法是自定義文件流代替標準輸出的subprocess.PIPE

 

4.  subprocess.call

 

函數原型:

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)

 

函數解釋:

Run the command described by args. Wait for command to complete, then return the returncode attribute

 

該函數執行args接收的命令,等待命令執行完成,而後返回returncode

 

從函數解釋可知,該函數是阻塞型的,會一直等待子進程運行結束,並返回進程的returncode後,纔會繼續運行程序後面的代碼行。若是不須要與子進程進行交互,且須要阻塞,可使用該函數來完成任務。

 

總結

在調用第三方工具的方法上,python自己提供了至關多的實現方法,咱們在使用時,須要根據實際問題、各類方法的特性進行選擇。

 

其餘資源

關於python學習、分享、交流,筆者開通了微信公衆號小蟒社區】,感興趣的朋友能夠關注下,歡迎加入,創建屬於咱們本身的小圈子,一塊兒學python

相關文章
相關標籤/搜索