わお。私はそれを理解しました。
答えは、python の subprocess モジュールとパイプを使用することです!
編集:配管をサポートするblast2を使用していることを忘れていました。
(これはクラスの一部です)
def _query(self):
from subprocess import Popen, PIPE, STDOUT
pipe = Popen([BLAST,
'-p', 'blastn',
'-d', self.database,
'-m', '8'],
stdin=PIPE,
stdout=PIPE)
pipe.stdin.write('%s\n' % self.sequence)
print pipe.communicate()[0]
ここで、self.database はデータベース ファイル名を含む文字列です。つまり、'nt.fa' self.sequence はクエリ シーケンスを含む文字列です。
これにより、出力が画面に出力されますが、簡単に解析できます。遅いディスク I/O はありません。遅い XML 解析はありません。このためのモジュールを作成し、github に配置します。
また、ここまではまだできていませんが、クエリごとにブラスト データベースを読み取って RAM にロードする必要がないように、複数のクエリを実行できると思います。