2012-08-29 20 views
0

我是一名Perl初學者。我有這樣的Perl代碼段Perl將bash pipe發佈到Java

$normal_pileup = "samtools mpileup -q 1 -f XXXX YYYYY"; 
$tumor_pileup = "samtools mpileup -q 1 -f XXXX ZZZZZ"; 

bash -c \"java -jar ttt.jar <\($normal_pileup\) <\($tumor_pileup\) output 

他們試圖發出一個系統調用這些命令該管道輸入到Java程序。我無法讓它工作。任何人都可以告訴我該怎麼做?

+0

是行 '的bash -c ...' perl腳本的一部分?它看起來不像我有效的Perl。 –

回答

1
$normal_pileup = "samtools mpileup -q 1 -f XXXX YYYYY"; 

不會執行任何命令,只會將samtools mpileup -q 1 -f XXXX YYYYY作爲字符串存儲。 $tumor_pileup也一樣。

如果要執行的命令使用

$normal_pileup = `samtools mpileup -q 1 -f XXXX YYYYY`; 

bash不是一個Perl命令。

`java -jar ttt.jar ...` 

你的 「java」 是也最容易出錯

  • <您指定STDIN讀取。應該是一個文件,但在你的情況下,你指定的是前一個命令的輸出。這隻有在samtool的輸出是文件名時纔有效。

  • 如果你希望你的java程序來處理另一個命令的輸出,您將需要一個管道

    mycommand | java 
    

總結我想您

` (samtools mpileup -q 1 -f XXXX YYYYY; samtools mpileup -q 1 -f XXXX ZZZZZ) | java -jar ttt.jar output ` 
+0

非常感謝您的回覆。我的意圖是運行兩個bash命令「samtools mpileup -q 1 -f XXXX YYYYY」和'samtools mpileup -q 1 -f XXXX YYYYY'。他們的輸出將作爲兩個參數直接傳送到java程序中。 – user1632530

+0

@ user1632530所以兩者都不會生成數據流,只是一個字符串?你能給我們一個例子輸出嗎? – Matteo

+0

問題來自使用varscan。原始網址是http://varscan.sourceforge.net/somatic-calling.html – user1632530

2

你不能直接調用的bash來自Perl。如果您使用system,則會調用/ bin/sh,這可能不支持進程替換。

一個可能的解決方法是

system qq(echo 'java -jar ttt.jar <($normal_pileup) <($tumor_pileup) output' | bash);