標籤:index log connect ram 包含 new padding func 不為
當我們需要調用系統的命令的時候,最先考慮的os模組。用os.system()和os.popen()來進行操作。但是這兩個命令過於簡單,不能完成一些複雜的操作,如給啟動並執行命令提供輸入或者讀取命令的輸出,判斷該命令的運行狀態,管理多個命令的並行等等。這時subprocess中的Popen命令就能有效完成我們需要的操作。
subprocess模組允許一個進程建立一個新的子進程,通過管道串連到子進程的stdin/stdout/stderr,擷取子進程的傳回值等操作。
The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes.
This module intends to replace several other, older modules and functions, such as: os.system、os.spawn*、os.popen*、popen2.*、commands.*
這個模組一個類:Popen。
| 123 |
#Popen它的建構函式如下: subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None,stderr=None, preexec_fn=None, close_fds=False, shell=False,<br> cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) |
parameter簡單命令:
| 123456789101112131415161718 |
import subprocess a=subprocess.Popen(‘ls‘)# 建立一個新的進程,與主進程不同步 print(‘>>>>>>>‘,a)#a是Popen的一個執行個體對象 ‘‘‘>>>>>>> <subprocess.Popen object at 0x10185f860>__init__.py__pycache__log.pymain.py ‘‘‘ # subprocess.Popen(‘ls -l‘,shell=True) # subprocess.Popen([‘ls‘,‘-l‘]) |
subprocess.PIPE
在建立Popen對象時,subprocess.PIPE可以初始化stdin, stdout或stderr參數。表示與子進程通訊的標準流。
| 123456 |
import subprocess # subprocess.Popen(‘ls‘)p=subprocess.Popen(‘ls‘,stdout=subprocess.PIPE)#結果跑哪去啦? print(p.stdout.read())#這這呢:b‘__pycache__\nhello.py\nok.py\nweb\n‘ |
這是因為subprocess建立了子進程,結果本在子進程中,if 想要執行結果轉到主進程中,就得需要一個管道,即 : stdout=subprocess.PIPE
subprocess.STDOUT
建立Popen對象時,用於初始化stderr參數,表示將錯誤通過標準輸出資料流輸出。
Popen的方法 View Codesupprocess模組的工具函數
| 12345678910111213 |
supprocess模組提供了一些函數,方便我們用於建立進程來實現一些簡單的功能。 subprocess.call(*popenargs, **kwargs)運行命令。該函數將一直等待到子進程運行結束,並返回進程的returncode。如果子進程不需要進行交 互,就可以使用該函數來建立。 subprocess.check_call(*popenargs, **kwargs)與subprocess.call(*popenargs, **kwargs)功能一樣,只是如果子進程返回的returncode不為0的話,將觸發CalledProcessError異常。在異常對象中,包 括進程的returncode資訊。 check_output(*popenargs, **kwargs)與call()方法類似,以byte string的方式返回子進程的輸出,如果子進程的傳回值不是0,它拋出CalledProcessError異常,這個異常中的returncode包含返回碼,output屬性包含已有的輸出。 getstatusoutput(cmd)/getoutput(cmd)這兩個函數僅僅在Unix下可用,它們在shell中執行指定的命令cmd,前者返回(status, output),後者返回output。其中,這裡的output包括子進程的stdout和stderr。 |
示範 互動命令:
終端輸入的命令分為兩種:
- 輸入即可得到輸出,如:ifconfig
- 輸入進行某環境,依賴再輸入,如:python
Python supprocess模組