一、subprocess模塊簡介
Python subprocess模塊用於創建新的進程並與其進行交互。它提供了一個強大的API,可以通過標準的I/O流,管道和文件描述符與子進程通信。
二、使用subprocess.popen方法啟動子進程
Popen()是Python中啟動外部進程的主要方法。它支持的參數非常多,可以靈活地控制子進程的環境和行為。
以下是一個簡單的語法示例:
import subprocess output = subprocess.Popen(["echo", "Hello World!"], stdout=subprocess.PIPE).communicate()[0] print(output)
上面的代碼會啟動一個新的進程來執行命令echo “Hello World!”。執行結果會通過stdout管道傳送到主進程,最後打印輸出。communicate()方法的作用是等待子進程完成並返回結果。
三、subprocess.popen的參數詳解
1. args參數
args參數是要執行的命令,可以是一個字符串或者列表。如果是字符串,可以在其中使用Shell語法,如”ls -l | grep test”。如果是列表,則每個元素是一個命令或選項。
2. shell參數
shell參數用於指定是否以Shell模式執行命令,默認為False。如果為True,則args參數可以是一個字符串,支持Shell語法。
3. stdin、stdout和stderr參數
stdin、stdout和stderr參數用於指定子進程的輸入、輸出和錯誤輸出。它們可以是以下四種類型之一:
- PIPE:表示創建一個新的管道。
- file對象:表示重定向到一個指定的文件對象
- 文件描述符:表示重定向到一個指定的文件描述符
- None:表示重定向到當前進程的相應流
4. cwd參數
cwd參數用於指定子進程的工作目錄。
5. env參數
env參數用於指定子進程的環境變量。它可以為None,表示使用當前進程的環境變量;也可以是一個字典,表示指定的環境變量。
四、示例代碼
1. 執行一個命令
import subprocess result = subprocess.Popen("echo Hello World!", shell=True, stdout=subprocess.PIPE).stdout.read() print(result)
2. 通過管道傳遞數據
import subprocess process1 = subprocess.Popen(["ls"], stdout=subprocess.PIPE) process2 = subprocess.Popen(["grep", "test"], stdin=process1.stdout, stdout=subprocess.PIPE) result = process2.communicate()[0] print(result)
3. 執行一個Python腳本
import subprocess process = subprocess.Popen(["python", "test.py"], stdout=subprocess.PIPE, shell=True) output, error = process.communicate() if error: print(error) else: print(output)
4. 在後台啟動一個進程
import subprocess process = subprocess.Popen(["python", "test.py"], stdout=subprocess.PIPE, shell=True, start_new_session=True)
以上是四個常見的示例代碼,展示了subprocess模塊的基本用法。在實際應用中,我們可以根據需要靈活地使用各種參數和方法,來控制子進程的行為。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/236062.html