您好,登錄后才能下訂單哦!
subprocess模塊源碼介紹
介紹
subprocess生成新的進程,連接input/output管道,并獲取返回碼.
常用函數 |
subprocess.run() | 執行指定命令完成并返回一個包含執行結果的CompletedProcess類的實例。. |
---|---|---|
call() | 執行指定的命令,返回命令執行狀態 | |
check_call() | 執行指定的命令,如果執行成功則返回狀態碼,否則拋出異常 | |
check_output() | 執行指定的命令,如果執行狀態碼為0則返回命令執行結果,否則拋出異常 | |
getoutput(cmd) | 接收字符串格式的命令,執行命令并返回執行結果 | |
getstatusoutput(cmd) | 執行cmd命令,返回一個元組(命令執行狀態,命令執行結果輸出) | |
參數說明
subprocess.CompletedProcess類介紹
表示的是一個已結束進程的狀態信息.包含屬性如下:
示例
In [2]: subprocess.run(["ls","-l"])
-rw-r--r-- 1 liyuanjie liyuanjie 1350 12月 15 18:33 wireshark.md
Out[2]: CompletedProcess(args=['ls', '-l'], returncode=0)
In [3]: subprocess.run(["ls","-l","/dev/null"],stdout=subprocess.PIPE)
Out[3]: CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'
crw-rw-rw- 1 root root 1, 3 12\xe6\x9c\x88 15 07:51 /dev/null\n')
- call()
In [4]: subprocess.call(['ls','-l'])
In [5]: subprocess.call('ls -l',shell=True)
In [6]: subprocess.call(['ls','-l'],stdout=subprocess.DEVNULL)
Out[6]: 0
In [7]: subprocess.call(['ls','-l','/services'])
- check_call()
In [9]: subprocess.check_call(['ls','-l'])
In [10]: subprocess.check_call('ls -l',shell=True)
In [11]: subprocess.check_call('ls -l /services',shell=True)
- check_output()
In [12]: ret = subprocess.check_output(['ls','-l'])
In [13]: print(ret) 返回的是字節序列.
In [14]: ret = subprocess.check_output(['ls','-l'],universal_newlines=True)
In [15]: print(ret) 返回的是字符串.
- getoutput()與getstatusoutput()
In [16]: ret = subprocess.getoutput('ls -l')
In [17]: print(ret)
正確情況下:
In [18]: retcode,output = subprocess.getstatusoutput('ls -l')
In [19]: print(retcode)
0
In [20]: print(output)
錯誤情況下:
In [21]: retcode,output = subprocess.getstatusoutput('ls -l /test')
In [22]: print(retcode)
2
In [23]: print(output)
ls: cannot access '/test': No such file or directory
該類用于在一個新的進程中執行一個子程序.由于subprocess模塊底層的進程創建和管理是由Popen類來處理的. 可以通過subprocess.Popen類提供的靈活的api來完成.
Popen的構造函數
參數說明
Popen類的實例可調用的方法
Popen.poll() | 檢查命令是否已經執行結束. |
---|---|
wait(timeout=None) | 等待子進程結束,返回狀態碼. |
communicate() | 與進程進行交互. |
send_signal(signal) | 發送指定的信號給這個子進程 |
terminate() | 停止該子進程. |
kill() | 殺死該子進程. |
示例
In [25]: p = subprocess.Popen('df -hT',stdout=subprocess.PIPE,shell=True)
In [26]: print(p.stdout.read())
In [2]: p1 = subprocess.Popen(['df','-Th'],stdout=subprocess.PIPE)
In [3]: p2 = subprocess.Popen(['grep','dev'],stdin=p1.stdout,stdout=subprocess.PIPE)
In [4]: out,err = p2.communicate()
In [5]: print(out)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。