【问题标题】:Trouble calling EMBOSS program from python从 python 调用 EMBOSS 程序时遇到问题
【发布时间】:2012-07-12 02:59:19
【问题描述】:

我无法通过 Python 调用名为 Sixpack 的 EMBOSS 程序(通过命令行运行)。

我通过 Windows 7 运行 Python,Python 版本 3.23,Biopython 版本 1.59,EMBOSS 版本 6.4.0.4。 Sixpack 用于翻译所有六个阅读框中的 DNA 序列,并创建两个文件作为输出;一个识别 ORF 的序列文件,以及一个包含蛋白质序列的文件。

我可以从命令行成功调用三个必需的参数:(-sequence [input file]-outseq [output sequence file]-outfile [protein sequence file])。我一直在使用 subprocess 模块来代替 os.system,因为我读到它更强大、更通用。

以下是我的 python 代码,它运行没有错误,但不会产生所需的输出文件。

from Bio import SeqIO
import re
import os
import subprocess

infile = input('Full path to EXISTING .fasta file would you like to open: ')
outdir = input('NEW Directory to write outfiles to: ')
os.mkdir(outdir)
for record in SeqIO.parse(infile, "fasta"):

    print("Translating (6-Frame): " + record.id)

    ident=re.sub("\|", "-", record.id)

    print (infile)
    print ("Old record ID: " + record.id)
    print ("New record ID: " + ident)

    subprocess.call (['C:\memboss\sixpack.exe', '-sequence ' + infile, '-outseq ' + outdir + ident + '.sixpack', '-outfile ' + outdir + ident + '.format'])

    print ("Translation of: " + infile + "\nWritten to: " + outdir + ident)

【问题讨论】:

  • 会报错吗?该命令与您在命令行中键入的命令完全相同吗?
  • 嗯,不完全一样...我正在使用(字符串、变量?)例如“infile”、“outdir”和“ident”来表示实际路径和文件名将被输入命令行。子进程模块可以处理这些字符串/变量吗?
  • 使用变量很好,但我的意思是:如果我将命令从您的代码(基本上是一个字符串)复制并粘贴到实际的命令行,它会工作吗?您可能需要指定完整路径而不是相对路径才能进行文件访问。
  • 命令行:sixpack -sequence c:\python32\multi.fasta -outseq c:\memboss\OUTSEQ.sixpack -outfile c:\memboss\OUTFILE.sixpack
  • 相对路径和完整路径有什么区别?只要用户在提示时键入完整路径,该完整路径就会被分配给变量“infile”、“outdir”等...

标签: python subprocess biopython emboss


【解决方案1】:

找到答案.. 我使用错误的语法来调用子进程。这是正确的语法:

subprocess.call (['C:\memboss\sixpack.exe', '-sequence', infile, '-outseq', outdir + ident + '.sixpack', '-outfile', outdir + ident + '.format'])

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2012-05-07
    相关资源
    最近更新 更多