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包的相關計時功能計算出該程式執行時長。呼叫模組...