Python模組subprocess小記

2021-07-27 09:09:44 字數 1967 閱讀 1394

subprocess模組被推薦用來替換一些老的模組和函式,如:os.system、os.spawn*、os.popen*等。

真的可以替換嗎?

subprocess模組目的是啟動乙個新的程序並與之通訊,最常用是定義類popen,使用popen可以建立程序,並與程序進行複雜的互動。

這個模組主要就提供乙個類popen:

class subprocess.popen( args, 

bufsize=0,

executable=none,

stdin=none,

stdout=none,

stderr=none,

preexec_fn=none,

close_fds=false,

shell=false,

cwd=none,

env=none,

universal_newlines=false,

startupinfo=none,

creationflags=0)

這堆東西真讓人抓狂:

args

字串或者列表

bufsize

0 無緩衝

1 行緩衝

其他正值 緩衝區大小

負值 採用預設系統緩衝(一般是全緩衝)

executable

一般不用吧,args字串或列表第一項表示程式名

stdin

stdout

stderr

none 沒有任何重定向,繼承父程序

pipe 建立管道

檔案物件

檔案描述符(整數)

stderr 還可以設定為 stdout

preexec_fn

鉤子函式, 在fork和exec之間執行。(unix)

close_fds

unix 下執行新程序前是否關閉0/1/2之外的檔案

windows下不繼承還是繼承父程序的檔案描述符

shell

為真的話

unix下相當於args前面新增了 "/bin/sh「 」-c」

window下,相當於新增"cmd.exe /c"

cwd設定工作目錄

env設定環境變數

universal_newlines

各種換行符統一處理成 '\n'

startupinfo

window下傳遞給createprocess的結構體

creationflags

windows下,傳遞create_new_console建立自己的控制台視窗

該物件提供有不少方法函式可用。而且前面已經用到了wait()/poll()/communicate()

poll()

檢查是否結束,設定返回值

wait()

等待結束,設定返回值

communicate()

引數是標準輸入,返回標準輸出和標準出錯

send_signal()

傳送訊號 (主要在unix下有用)

terminate()

終止程序,unix對應的sigterm訊號,windows下呼叫api函式terminateprocess()

kill()

殺死程序(unix對應sigkill訊號),windows下同上

stdin

stdout

stderr

引數中指定pipe時,有用

pid程序id

returncode

程序返回值

p = subprocess.popen(['adb', '-s', device_sn, 'shell',  'mount | busybox grep ext4'], stdout=subprocess.pipe)

mounttype = p.communicate()[0]

if (mounttype.find('rw') == -1):

python之sys模組和subprocess模組

sys.path 可以把檔案路徑加入到環境變數 返回模組的搜尋路徑 返回模組的搜尋路徑,初始化時使用pythonpath環境變數的值 sys.argv 用來接收python直譯器執行py檔案後跟的引數 例如 python cp.py argv1 argv2 arg3 python直譯器執行 sys....

Python 系統命令呼叫之 subprocess

python 3不再推薦使用老的os.system os.popen commands.getstatusoutput 等方法來呼叫系統命令,而建議統一使用subprocess庫所對應的方法如 popen getstatusoutput call 標準用法使用資料傳參,可以用shlex庫來正確切割命...

python模組 python模組介紹

一 簡介 模組是乙個包含所有你定義的函式和變數的檔案,其字尾名是.py。模組可以被其他程式匯入來使用模組具有的功能。這也是使用python標準庫的方式。首先使用import匯入time包,這樣意味著我們能夠使用time包裡的所有公共內容。最後利用time包的相關計時功能計算出該程式執行時長。呼叫模組...