6

BLAST クエリ (bl2seq) を実行するスクリプトがあります。

スクリプトは次のように機能します。

  1. 系列a、系列bを取得
  2. シーケンス a を filea に書き込む
  3. シーケンス b を fileb に書き込む
  4. コマンド「bl2seq -i filea -j fileb -n blastn」を実行します
  5. STDOUT から出力を取得し、解析します
  6. 2000万回繰り返す

プログラム bl2seq はパイピングをサポートしていません。これを行い、ハードドライブへの書き込み/読み取りを回避する方法はありますか?

私はPython BTWを使用しています。

4

5 に答える 5

4

実行している OS によっては、 bash のプロセス置換などを使用できる場合があります。Python でどのように設定したかはわかりませんが、基本的には名前付きパイプ (または名前付きファイル記述子) を使用しています。ファイル内をシークしようとすると機能しませんbl2seqが、順番に読み取るだけであれば機能するはずです。

于 2010-02-11T22:45:54.867 に答える
1

わお。私はそれを理解しました。

答えは、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 にロードする必要がないように、複数のクエリを実行できると思います。

于 2010-05-06T19:58:35.110 に答える
1

bl2seq がパイピングをサポートしていないことをどのように知っていますか? ちなみに、パイプはプログラムではなく OS の機能です。bl2seq プログラムが何かを出力する場合は、STDOUT に出力するかファイルに出力するかを問わず、出力を解析できるはずです。オプションなど、ファイルに出力するためのオプションについては、bl2seq のヘルプ ファイルを確認してください-o。その後、ファイルを解析できます。

また、Python を使用しているため、使用できる代替手段はBioPythonモジュールです。

于 2010-02-12T01:01:02.813 に答える
1

これはBioPerlbl2seqのプログラムですか? もしそうなら、あなたはそれに配管することができないようです。ただし、推奨される方法である を使用して、独自のハックをコーディングできます。ただし、でそれを行う必要があります。Bio::Tools::Run::AnalysisFactory::PisePerl

これが異なる場合bl2seqは、メッセージを無視してください。いずれにせよ、おそらくもう少し詳細を提供する必要があります。

于 2010-02-11T22:10:30.340 に答える
1

R スクリプトを使用して blast2 を呼び出します。

....
system("mkfifo seq1")
system("mkfifo seq2")
system("echo  sequence1 > seq1"), wait = FALSE)
system("echo  sequence2 > seq2"), wait = FALSE)
system("blast2 -p blastp -i seq1 -j seq2 -m 8", intern = TRUE)
....

これは、ハード ドライブからの書き込みと読み取りに比べて 2 倍 (!) 遅くなります!

于 2010-07-01T18:09:25.957 に答える