【发布时间】:2014-05-24 13:43:45
【问题描述】:
我正在尝试从用 Perl 编写的网页获取用户输入并将其发送到本地程序 (blastp),然后显示结果。
这就是我现在拥有的:
(input code)
print $q->p, "Your database: $bd",
$q->p, "Your protein is: $prot",
$q->p, "Executing...";
print $q->p, system("blastp","-db $bd","-query $prot","-out results.out");
现在,我做了一些研究,但我不能完全理解你应该如何在 Perl 中做这样的事情。我尝试打开一个文件,写入文件,然后将其作为输入发送到 blastp,但没有成功。
作为参考,这一行产生一个成功的输出文件:
kold@sazabi ~/BLAST/pataa $ blastp -db pataa -query ../teste.fs -out results.out
我可能需要强制 bd 从绝对路径加载,但这应该不难。
edit:是的,数据库有一个环境变量,这是固定的。好的,我所需要的只是将输入放入文件中,将其传递给命令,然后将输出文件打印到 CGI 页面。
edit2:澄清:
我在 $prot 中接收用户输入,我想将它传递给 blastp in -query,让程序 blastp 执行,然后将 results.out 文件打印给用户(或者只是有一个链接,因为blastp可以输出HTML)
编辑:
好的,修复了我需要修复的所有内容。最大的问题是我没有发现问题所在:我必须安装 Tiny:Capture 并打印出 stderr,这时我意识到环境变量设置不正确,因此 BLAST 没有找到我的数据库。感谢大家的帮助!
【问题讨论】:
-
我不明白你想要什么,解释更多
-
添加了更多细节。
-
$prot 会包含文件名还是内容?
-
现在,我正计划使用 $prot 接收 FASTA 文本,即看起来像这样的内容:>gi|218093591|emb|CAT70956.1| unnamed protein product [Thermococcus kodakarensis KOD1] MKVLVAAPLHEKAIEVLKNAGFEVVYEEYPDEDRLVELVKDVDAIIVRSKPKVTRKVIEAAPKLKVIGRA GVGLDNIDLKAAEERGIKVVNSPGASSRSVAELAIGLIFAVARKIAFADRKMREGVWAKKQCMGIELEGK TIGVVGFGRIGYQVAKIANALGMKVLFYDPYPNEERAKEVGGKFADLETLLKESDVVTLHVPLVDATYHL INEERLKLMKPTAILINAARGAVVDTDALVKALQEGWIAGAGLDVFEEEPLPADHPLTKLDNVVLTPHIG ASTVEAQMRAGVEVAEKIVEALKG