subprocess
該子模塊允許你創建新的流程,連接到它們的輸入/輸出/錯誤管道,並獲取他們的返回值。該模塊打算替換多個舊的模塊和功能:
os.system 和
os.spawn *
使用subprocess時建議使用run()函數去處理所有它可以處理的情況,因為高級用法可以直接使用
底層
POPEN
接口
。
run()函數是Python 3.5中新添加的。
使用方法:
subprocess.
run
(
args,
*,
stdin=None,
input=None,
stdout=None,
stderr=None,
shell=False,
timeout=None,
check=False
)
args
該參數用於啟動進程。這可能是一個列表或一個字符串。
returncode 該參數表示
子進程的退出狀態。
通常情況下,0作為退出狀態表明它成功運行。
負值-N表明
子進程
被信號N終止(僅POSIX)。
stdout
該參數表示
標准輸出
從子過程中捕獲標准輸出。一個字節序列,或字符串 ()如果運行一個字符串被稱為與universal_newlines = TRUE。無如果stdout沒有抓獲。
如果您運行進程與標准錯誤= subprocess.STDOUT,輸出和錯誤將在此屬性相結合,和stderr將是無。
標准錯誤
從子過程中捕獲標准錯誤。一個字節序列,或()如果運行一個字符串被稱為與universal_newlines = TRUE。無標准錯誤,如果沒有抓獲。
check_returncode()
如果返回碼不為零,養CalledProcessError。
先看個例子:
>>> import subprocess
>>> subprocess.run(["ls"])
run_server.py # ls命令返回的結果
CompletedProcess(args=['ls'], returncode=0) # run函數返回的結果
>>> subprocess.run(["ls", "-l"]) # 這個和上面的類似
總用量 4
-rw-r--r-- 1 root root 266 9月 22 14:35 run_server.py
CompletedProcess(args=['ls', '-l'], returncode=0)
>>> subprocess.run(["ls"],stdout=subprocess.PIPE) # 加上
stdout參數之后,系統命令返回的結果就不會輸出了
CompletedProcess(args=['ls'], returncode=0, stdout=b'run_server.py\n')
>>> a = subprocess.run(["ls"],stdout=subprocess.PIPE)
>>> print(a)
CompletedProcess(args=['ls'], returncode=0, stdout=b'run_server.py\n')
>>> print(a.stdout,a.args,a.returncode) # 可以對返回值進行操作
b'run_server.py\n' ['ls'] 0