本文實例講述了Python subprocess模塊功能與常見用法。分享給大家供大家參考,具體如下:
subprocess最早在2.4版本引入。用來生成子進程,并可以通過管道連接他們的輸入/輸出/錯誤,以及獲得他們的返回值。
subprocess用來替換多個舊模塊和函數:
os.system os.spawn* os.popen* popen2.* commands.*運行python的時候,我們都是在創建并運行一個進程,linux中一個進程可以fork一個子進程,并讓這個子進程exec另外一個程序。在python中,我們通過標準庫中的subprocess包來fork一個子進程,并且運行一個外部的程序。subprocess包中定義有數個創建子進程的函數,這些函數分別以不同的方式創建子進程,所欲我們可以根據需要來從中選取一個使用。另外subprocess還提供了一些管理標準流(standard stream)和管道(pipe)的工具,從而在進程間使用文本通信。
執行操作系統的命令,將結果輸出到屏幕,只返回命令執行狀態(0:成功,非 0 : 失敗)
import os>>> a = os.system("df -Th")Filesystem Type Size Used Avail Use% Mounted on/dev/sda3 ext4 1.8T 436G 1.3T 26% /tmpfs tmpfs 16G 0 16G 0% /dev/shm/dev/sda1 ext4 190M 118M 63M 66% /boot>>> a0 # 0 表示執行成功# 執行錯誤的命令>>> res = os.system("list")sh: list: command not found>>> res32512 # 返回非 0 表示執行錯誤
執行操作系統的命令,會將結果保存在內存當中,可以用read()
方法讀取出來
import os>>> res = os.popen("ls -l")# 將結果保存到內存中>>> print res<open file 'ls -l', mode 'r' at 0x7f02d249c390># 用read()讀取內容>>> print res.read()total 267508-rw-r--r-- 1 root root 260968 Jan 27 2016 AliIM.exe-rw-------. 1 root root 1047 May 23 2016 anaconda-ks.cfg-rw-r--r-- 1 root root 9130958 Nov 18 2015 apache-tomcat-8.0.28.tar.gz-rw-r--r-- 1 root root 0 Oct 31 2016 badblocks.logdrwxr-xr-x 5 root root 4096 Jul 27 2016 certs-builddrwxr-xr-x 2 root root 4096 Jul 5 16:54 Desktop-rw-r--r-- 1 root root 2462 Apr 20 11:50 Face_24px.ico
>>> import subprocess# python 解析則傳入命令的每個參數的列表>>> subprocess.run(["df","-h"])Filesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup-LogVol00 289G 70G 204G 26% /tmpfs 64G 0 64G 0% /dev/shm/dev/sda1 283M 27M 241M 11% /bootCompletedProcess(args=['df', '-h'], returncode=0)# 需要交給Linux shell自己解析,則:傳入命令字符串,shell=True>>> subprocess.run("df -h|grep /dev/sda1",shell=True)/dev/sda1 283M 27M 241M 11% /bootCompletedProcess(args='df -h|grep /dev/sda1', returncode=0)
新聞熱點
疑難解答