Bio.Application 套件
模組內容
在 Biopython 中存取應用程式的一般機制(已棄用)。
此模組不適用於直接使用。它提供了基礎物件,這些物件會被我們的命令列包裝器子類化,例如
Bio.Align.Applications
Bio.Blast.Applications
Bio.Emboss.Applications
Bio.Sequencing.Applications
這些模組為命令列工具提供包裝類別,以協助您透過設定每個參數的值來建構命令列字串。然後,完成的命令列字串通常會透過內建的 Python 模組 subprocess 來調用。
由於持續維護或保持命令列應用程式包裝器為最新版本帶來的負擔,我們決定棄用並最終移除它們。我們現在建議您建構命令列並直接使用 subprocess 模組來調用。
- exception Bio.Application.ApplicationError(returncode, cmd, stdout='', stderr='')
基礎類別:
CalledProcessError
當應用程式傳回非零的結束狀態時引發(已過時)。
結束狀態將儲存在 returncode 屬性中,同樣地,命令列字串將儲存在 cmd 屬性中,而 (如果已捕獲) stdout 和 stderr 將以字串形式儲存。
此例外是 subprocess.CalledProcessError 的子類別。
>>> err = ApplicationError(-11, "helloworld", "", "Some error text") >>> err.returncode, err.cmd, err.stdout, err.stderr (-11, 'helloworld', '', 'Some error text') >>> print(err) Non-zero return code -11 from 'helloworld', message 'Some error text'
- __init__(returncode, cmd, stdout='', stderr='')
初始化類別。
- __str__()
將錯誤格式化為字串。
- __repr__()
將錯誤表示為字串。
- class Bio.Application.AbstractCommandline(cmd, **kwargs)
基礎類別:
object
用於建構命令列字串的通用介面(已過時)。
此類別不應直接呼叫;它應該被子類化以提供特定應用程式的實作。
對於使用範例,我們將展示其中一個 EMBOSS 包裝器。您可以使用關鍵字引數在建立包裝器物件時設定選項,或者稍後使用其對應的屬性。
>>> from Bio.Emboss.Applications import WaterCommandline >>> cline = WaterCommandline(gapopen=10, gapextend=0.5) >>> cline WaterCommandline(cmd='water', gapopen=10, gapextend=0.5)
您可以改為透過其屬性來操作參數,例如
>>> cline.gapopen 10 >>> cline.gapopen = 20 >>> cline WaterCommandline(cmd='water', gapopen=20, gapextend=0.5)
您可以透過「刪除」對應的屬性來清除已新增的參數
>>> del cline.gapopen >>> cline.gapopen >>> cline WaterCommandline(cmd='water', gapextend=0.5)
設定所需的參數後,您可以將物件轉換為字串(例如,記錄命令)
>>> str(cline) Traceback (most recent call last): ... ValueError: You must either set outfile (output filename), or enable filter or stdout (output to stdout).
在這種情況下,包裝器知道某些引數是建構工具的有效命令列所必需的。如需完整範例,
>>> from Bio.Emboss.Applications import WaterCommandline >>> water_cmd = WaterCommandline(gapopen=10, gapextend=0.5) >>> water_cmd.asequence = "asis:ACCCGGGCGCGGT" >>> water_cmd.bsequence = "asis:ACCCGAGCGCGGT" >>> water_cmd.outfile = "temp_water.txt" >>> print(water_cmd) water -outfile=temp_water.txt -asequence=asis:ACCCGGGCGCGGT -bsequence=asis:ACCCGAGCGCGGT -gapopen=10 -gapextend=0.5 >>> water_cmd WaterCommandline(cmd='water', outfile='temp_water.txt', asequence='asis:ACCCGGGCGCGGT', bsequence='asis:ACCCGAGCGCGGT', gapopen=10, gapextend=0.5)
您通常會透過使用 subprocess 模組的標準 Python 作業系統呼叫來執行命令列,以進行完全控制。對於您只想執行命令並取得輸出的簡單情況
stdout, stderr = water_cmd()
請注意,預設情況下,我們假設底層工具安裝在系統 $PATH 環境變數中。這在 Linux/Unix 下是正常的,但在 Windows 下可能需要手動完成。或者,您可以將二進位檔的完整路徑指定為第一個引數 (cmd)
>>> from Bio.Emboss.Applications import WaterCommandline >>> water_cmd = WaterCommandline(r"C:\Program Files\EMBOSS\water.exe", ... gapopen=10, gapextend=0.5, ... asequence="asis:ACCCGGGCGCGGT", ... bsequence="asis:ACCCGAGCGCGGT", ... outfile="temp_water.txt") >>> print(water_cmd) "C:\Program Files\EMBOSS\water.exe" -outfile=temp_water.txt -asequence=asis:ACCCGGGCGCGGT -bsequence=asis:ACCCGAGCGCGGT -gapopen=10 -gapextend=0.5
請注意,由於路徑名稱包含空格,因此已自動加上引號。
- parameters = None
- __init__(cmd, **kwargs)
建立命令列包裝器物件的新執行個體。
- __str__()
使用目前設定的選項建立命令列字串。
例如
>>> from Bio.Emboss.Applications import WaterCommandline >>> cline = WaterCommandline(gapopen=10, gapextend=0.5) >>> cline.asequence = "asis:ACCCGGGCGCGGT" >>> cline.bsequence = "asis:ACCCGAGCGCGGT" >>> cline.outfile = "temp_water.txt" >>> print(cline) water -outfile=temp_water.txt -asequence=asis:ACCCGGGCGCGGT -bsequence=asis:ACCCGAGCGCGGT -gapopen=10 -gapextend=0.5 >>> str(cline) 'water -outfile=temp_water.txt -asequence=asis:ACCCGGGCGCGGT -bsequence=asis:ACCCGAGCGCGGT -gapopen=10 -gapextend=0.5'
- __repr__()
傳回命令列物件的表示形式,以進行除錯。
例如
>>> from Bio.Emboss.Applications import WaterCommandline >>> cline = WaterCommandline(gapopen=10, gapextend=0.5) >>> cline.asequence = "asis:ACCCGGGCGCGGT" >>> cline.bsequence = "asis:ACCCGAGCGCGGT" >>> cline.outfile = "temp_water.txt" >>> print(cline) water -outfile=temp_water.txt -asequence=asis:ACCCGGGCGCGGT -bsequence=asis:ACCCGAGCGCGGT -gapopen=10 -gapextend=0.5 >>> cline WaterCommandline(cmd='water', outfile='temp_water.txt', asequence='asis:ACCCGGGCGCGGT', bsequence='asis:ACCCGAGCGCGGT', gapopen=10, gapextend=0.5)
- set_parameter(name, value=None)
設定程式的命令列選項(已過時)。
每個參數都可透過屬性和在建立執行個體時作為具名關鍵字使用。使用這兩種方式的其中一種比使用這個舊版 set_parameter 方法更好,這個方法現在已過時,並且可能在未來版本中被棄用,然後被移除。
- __setattr__(name, value)
將屬性名稱設定為值(私有)。
此程式碼實作了針對使用者介面問題的因應措施。如果沒有這個 __setattr__,基於屬性的參數指派將會靜默地接受無效的參數,導致已知使用者假設應用程式的參數已設定,但實際上並未設定的情況。
>>> from Bio.Emboss.Applications import WaterCommandline >>> cline = WaterCommandline(gapopen=10, gapextend=0.5, stdout=True) >>> cline.asequence = "a.fasta" >>> cline.bsequence = "b.fasta" >>> cline.csequence = "c.fasta" Traceback (most recent call last): ... ValueError: Option name csequence was not found. >>> print(cline) water -stdout -asequence=a.fasta -bsequence=b.fasta -gapopen=10 -gapextend=0.5
此因應措施使用物件屬性的白名單,並將物件屬性清單設定為正常,適用於這些屬性。其他屬性會被假設為參數,並傳遞給 self.set_parameter 方法以進行驗證和指派。
- __call__(stdin=None, stdout=True, stderr=True, cwd=None, env=None)
執行命令,等待其完成,然後傳回 (stdout, stderr)。
執行命令列工具並等待其完成。如果傳回非零的錯誤層級,則會引發例外。否則,會傳回兩個包含 stdout 和 stderr 的字串。
可選的 stdin 引數應該是要作為標準輸入傳遞至工具的資料字串。
可選的 stdout 和 stderr 引數可能是檔案名稱 (字串),否則會被視為布林值,並控制是否應將輸出捕獲為字串 (True,預設值),或者透過將其傳送至 /dev/null 來忽略,以避免浪費記憶體 (False)。如果傳送至檔案或被忽略,則會傳回空字串。
可選的 cwd 引數是提供要執行命令的工作目錄的字串。如需詳細資訊,請參閱 Python 的 subprocess 模組文件。
可選的 env 引數是一個字典,用於設定要在新程序中使用的環境變數。預設情況下,會使用目前程序的環境變數。如需詳細資訊,請參閱 Python 的 subprocess 模組文件。
預設範例用法
from Bio.Emboss.Applications import WaterCommandline water_cmd = WaterCommandline(gapopen=10, gapextend=0.5, stdout=True, auto=True, asequence="a.fasta", bsequence="b.fasta") print("About to run: %s" % water_cmd) std_output, err_output = water_cmd()
此功能與 subprocess.check_output() 類似。一般而言,如果您需要對執行命令進行更多控制,請直接使用 subprocess。
當所呼叫的程式傳回非零的錯誤層級時,會引發自訂的 ApplicationError 例外。這包括作為例外物件屬性捕獲的任何 stdout 和 stderr 字串,因為它們可能對診斷錯誤很有用。