1

AMOS パッケージのプログラムを呼び出すための Python ラッパーを作成しています (特に、AMOS の古き良き minimus2 を使用して、さまざまなソースからのゲノム アセンブリをマージするため)。

シェルを直接使用する場合、スクリプトは次のように呼び出す必要があります。

toAmos -s myinput.fasta -o testoutput.afg
minimus2 testoutput -D REFCOUNT=400 -D OVERLAP=500

[明確にするために:

-toAmos: input.fasta ファイルを .afg 形式に変換し、入力シーケンス引数 ("-s") と出力引数 ("-o") を必要とします

-minimus2: 参照コンティグに対してシーケンス データセットをマージし、入力内の参照シーケンスの数を示す引数「-D REFCOUNT=x」と、シーケンス間の最小オーバーラップを示す引数「-D OVERLAP=Y」が必要です]

そのため、スクリプト内で subprocess.call() を使用して、必要な AMOS ツールを呼び出します。

基本的に私はこれを行います:

from subprocess import call:
output_basename = "testoutput"
inputfile = "myinput.fasta"

call(["toAmos", "-s " + inputfile, "-o " + output_basename + ".afg"])
call(["minimus2", output_basename, "-D REFCOUNT=400", "-D OVERLAP=500"])

しかし、この場合、AMOS ツールは引数を解釈できなくなります。引数は subprocess.call() によって変更され、正しく渡されないようです。私が得るエラーメッセージは次のとおりです。

Unknown option: s myinput.fasta
Unknown option: o testoutput.afg
You must specify an output AMOS AFG file with option -o
/home/jov14/tools/miniconda2/bin/runAmos: unrecognized option '-D REFCOUNT=400'
Command line parsing failed, use -h option for usage info

先頭の「-」なしで引数が渡されるようですか?それで、次のようにコマンドを単一の文字列(引数を含む)として渡そうとしました:

call(["toAmos -s " + inputfile +" -o " + output_basename + ".afg"])

しかし、その後、このエラーが発生します...

OSError: [Errno 2] No such file or directory

...おそらく、 subprocess.call が文字列全体を単一のスクリプトの名前として解釈しているためです。おそらく回避策として試すことができると思いshell=Trueますが、インターネットには、これに対して明確にアドバイスする指示がたくさんあります.

ここで何が問題になっているようですか?私に何ができる?

4

2 に答える 2