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 字串,因為它們可能對診斷錯誤很有用。