python subprocess 學習記錄

2021-07-09 11:52:40 字數 2186 閱讀 4043

抽空了解了一下python的subprocess包,簡單記下學習記錄。subprocess是python中的乙個子程序包,可以在執行python的時候開啟乙個子程序來執行另乙個外部程式。通過該包的功能,可以呼叫一些shell命令以對作業系統簡單操作。

subprocess定義了數個以不同方式建立子程序的函式,這裡只簡單記錄一下。

subprocess.call(),通過此函式建立子程序後,父程序會等待子程序執行完成,並返回退出資訊(returncode);

subprocess.popen(),  通過此函式建立的子程序,父程序並不會等待子程序完成,除非子程序呼叫child.wait()方法。

# coding:utf-8

import subprocess

rc = subprocess.call(["ls", "-l"])

# print(rc)

print("aaa")

# 通過shell執行

out = subprocess.popen("ls -l", shell=true)

# print out

print("test")

# total 24

# -rw-r--r-- 1 linshaokang staff 15 jan 6 12:55 __init__.py

# -rw-r--r-- 1 linshaokang staff 187 jan 16 12:27 test1.py

# -rw-r--r-- 1 linshaokang staff 769 jan 6 13:18 test2.py

## aaa 父程序的字串輸出一直等待子程序完成後才輸出##

# test 同樣的執行順序,父程序並未等待子程序完成,直接輸出test

## total 24

# -rw-r--r-- 1 linshaokang staff 15 jan 6 12:55 __init__.py

# -rw-r--r-- 1 linshaokang staff 187 jan 16 12:27 test1.py

# -rw-r--r-- 1 linshaokang staff 769 jan 6 13:18 test2.py

其中call(),當然還有check_call(), check_output()函式其實是在popen()上的一層封裝,這些封裝的目的只是方便簡化我們使用子程序,如果有定製化的需求,可以使用popen()函式。

子程序的文字流控制

child.stdin, child.stdout, child.stderr

在使用popen建立子程序時,可以通過subprocess.pipe將多個子程序連線起來組成乙個管道以實現通訊。

# coding:utf-8

import subprocess

child1 = subprocess.popen(["ls", "-l"], stdout=subprocess.pipe)

child2 = subprocess.popen(["wc", "-l"], stdin=child1.stdout, stdout=subprocess.pipe)

out = child2.stdout.read()

# out = child2.communicate()

print(out)

# subprocess.pipe實際上為文字流提供乙個快取區。child1的stdout將文字輸出到快取區,隨後child2的stdin從該pipe中將文字讀取走。

# child2的輸出文字也被存放在pipe中,直到communicate()方法從pipe中讀取出pipe中的文字。

## 要注意的是,communicate()是popen物件的乙個方法,該方法會阻塞父程序,直到子程序完成。

child = subprocess.popen(["cat"], stdin=subprocess.pipe)

child.stdin.write("test1.py")

# child.communicate("test1.py")

# --------result-------------

# 4

# test1.py

通過subprocess可以擴充套件python的功能,類似於作業系統的某些操作應用等。

Python subprocess模組學習總結

從python 2.4開始,python引入subprocess模組來管理子程序,以取代一些舊模組的方法 如 os.system os.spawn os.popen popen2.commands.不但可以呼叫外部的命令作為子程序,而且可以連線到子程序的input output error管道,獲取...

python subprocess模組 學習筆記

subprocess允許你啟動乙個新的程序並與其通訊。subprocess模組中只定義了乙個類,popen。subprocess.popen args,bufsize 0,executable none,stdin none,stdout none,stderr none,preexec fn no...

Python subprocess模組學習總結

從python 2.4開始,python引入subprocess模組來管理子程序,以取代一些舊模組的方法 如 os.system os.spawn os.popen popen2.commands.不但可以呼叫外部的命令作為子程序,而且可以連線到子程序的input output error管道,獲取...