首頁 > 後端開發 > Python教學 > Python 2.x 中如何使用subprocess模組進行子進程管理

Python 2.x 中如何使用subprocess模組進行子進程管理

PHPz
發布: 2023-07-30 10:07:58
原創
1172 人瀏覽過

Python 2.x 中如何使用subprocess模組進行子程序管理

概述:
在Python開發中,有時我們需要在程式中呼叫其他的外部命令或程式。 subprocess模組是Python提供的一個標準函式庫,它能夠方便地建立子程序並與其進行通訊。本文將介紹如何使用subprocess模組進行子進程管理,並透過程式碼範例進行說明。

  1. 建立子進程:
    subprocess模組中最常用的函數是subprocess.Popen(),它能夠啟動一個新進程並傳回一個Popen物件。使用Popen()函數建立子程序的基本語法如下:
import subprocess

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, 
                 close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, 
                 creationflags=0)
登入後複製

參數說明:

  • args: 字串或序列類型的指令行參數
  • bufsize: 控制輸入輸出緩衝大小的參數,0代表不緩衝,1代表行緩衝,其他正數代表緩衝區大小
  • executable: 可執行檔的路徑,預設使用系統PATH環境變數中的搜尋路徑
  • stdin:子程序的標準輸入流,預設為PIPE,即透過Popen物件的stdin屬性進行輸入
  • stdout: 子程序的標準輸出流,預設為PIPE,即透過Popen物件的stdout屬性進行輸出
  • stderr: 子程序的標準錯誤流,預設為PIPE,即透過Popen物件的stderr屬性進行輸出
  • preexec_fn : 一個將在子程序啟動之前被呼叫的可執行物件
  • close_fds: 是否關閉不再需要的檔案描述符,預設為False
  • shell: 是否透過shell進行指令解析,預設為False
  • cwd: 工作目錄,預設為None
  • env: 環境變量,預設為None,即使用父進程的環境變數
  • universal_newlines: 控制輸入輸出是否轉換為文字模式,預設為False
  • startupinfo: 子程序的啟動訊息,預設為None
  • creationflags: 子程序的建立標記,預設為0

#範例程式碼1:啟動一個子程序並執行指令,然後取得子程序的輸出結果。

import subprocess

cmd = "ls -l"
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
output, _ = p.communicate()
print(output)
登入後複製
  1. 子程序的輸入輸出:
    在建立子程序時,我們可以透過Popen()函數的stdin、stdout、stderr參數來指定子程序的輸入輸出。如果不指定這些參數,預設會建立一個新的管道並透過Popen物件的屬性來讀寫。

範例程式碼2:啟動一個子程序並透過管道進行輸入、輸出。

import subprocess

cmd = "grep -E 'a|b|c'"
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
input_data = "abcdefg
hijklmnop
qrstuvwxyz
"
output, _ = p.communicate(input_data)
print(output)
登入後複製

範例程式碼3:啟動一個子程序並重定向輸出到檔案中。

import subprocess

cmd = "grep -E 'a|b|c' input.txt > output.txt"
subprocess.Popen(cmd, shell=True)
登入後複製
  1. 等待子進程結束:
    子進程的執行是異步的,預設情況下,Popen()函數會立即傳回一個Popen對象,而不會等待子進程執行完畢。如果我們需要等待子程序執行完畢後再進行下一步操作,可以使用Popen()物件的wait()方法。

範例程式碼4:啟動一個子程序並等待其執行完畢。

import subprocess

cmd = "ls -l"
p = subprocess.Popen(cmd, shell=True)
p.wait()
print("子进程执行完毕")
登入後複製
  1. 捕獲子程序的退出狀態碼:
    每個子程序都會有一個退出狀態碼,代表其執行結果。可以使用Popen()物件的returncode屬性來取得子程序的退出狀態碼,如果為0代表執行成功。

範例程式碼5:取得子進程的退出狀態碼。

import subprocess

cmd = "ls -l"
p = subprocess.Popen(cmd, shell=True)
p.wait()
if p.returncode == 0:
    print("子进程执行成功")
else:
    print("子进程执行失败")
登入後複製

總結:
透過subprocess模組,我們可以方便地在Python程式中建立子進程並進行進程管理。具體的操作方法包括建立子進程、控制子進程的輸入輸出、等待子進程結束以及捕獲子進程的退出狀態碼。掌握這些知識,能夠更好地利用Python進行子進程管理,提升程式的彈性與擴展性。

以上就是Python 2.x中使用subprocess模組進行子程序管理的相關內容。希望對您有幫助。

以上是Python 2.x 中如何使用subprocess模組進行子進程管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板