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)

将属性 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 字符串,因为它们可能对诊断错误原因很有用。