一、介紹
在Python中,subprocess包下的Popen方法是一種非常重要的方法。它用於執行系統命令,並返回命令執行的結果。如果你現在還不了解subprocess包下的Popen方法是如何工作的,那麼這篇文章就是為你而寫的。
二、正文
1. Popen方法的基本使用
在使用Popen方法時,我們需要先導入subprocess包,然後通過Popen方法執行相應的命令。下面是一個簡單的示例:
import subprocess cmd = 'ls -l' p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() print('stdout:', stdout) print('stderr:', stderr)
其中,第一個參數(cmd)是需要執行的命令,第二個參數(shell)指定是否使用shell,第三個參數(stdout)和第四個參數(stderr)則為輸出哪些信息。當我們運行這個示例時,程序會將命令的stdout信息和stderr信息打印出來。
2. 得到進程ID
當我們使用Popen方法執行命令時,這個方法會返回一個popen對象。我們可以通過這個對象的pid屬性得到所執行命令的進程ID。
import subprocess cmd = 'ls -l' p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print('child_pid:', p.pid)
當我們運行這個示例時,程序會將所執行命令的進程ID打印出來。
3. 獲取命令的返回值
當我們使用Popen方法執行命令時,我們還可以得到命令的返回值。
import subprocess cmd = 'echo hello world' p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() retcode = p.returncode print('stdout:', stdout) print('stderr:', stderr) print('retcode:', retcode)
當我們運行這個示例時,程序會將命令的stdout信息、stderr信息以及返回值打印出來。
4. 超時終止進程
當我們使用Popen方法執行命令時,我們還可以設置一個超時時間(timeout),如果命令在指定時間內沒有執行完畢,那麼這個進程就會被終止。
import subprocess cmd = 'sleep 5' p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) try: stdout, stderr = p.communicate(timeout=3) except subprocess.TimeoutExpired: p.kill() stdout, stderr = p.communicate() print('stdout:', stdout) print('stderr:', stderr)
當我們運行這個示例時,程序會將命令的stdout信息和stderr信息打印出來。因為設置了timeout為3秒,而sleep命令需要5秒才能執行完畢,所以這個進程會在3秒後被強制終止。
5. 使用管道傳輸數據
我們還可以使用subprocess包下的Popen方法來實現多個子進程之間的管道通信。
import subprocess cmd1 = 'echo 123' cmd2 = 'tr 1 x' p1 = subprocess.Popen(cmd1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p2 = subprocess.Popen(cmd2, shell=True, stdin=p1.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p1.stdout.close() stdout, stderr = p2.communicate() print('stdout:', stdout) print('stderr:', stderr)
當我們運行這個示例時,程序會將最後一個進程(p2)的stdout信息和stderr信息打印出來。可以看到,我們使用一個管道將兩個命令連接了起來,第一個命令(cmd1)輸出的信息作為第二個命令(cmd2)的輸入信息。
三、小結
本篇文章主要講解了Python中subprocess包下的Popen方法的使用方法。我們從基本使用、得到進程ID、獲取命令的返回值、超時終止進程和使用管道傳輸數據這五個方面來詳細說明了這個方法的使用方法。希望這篇文章能夠幫助大家更好地掌握Popen方法的使用方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/242956.html