0

私はPerlの初心者です。私はこのPerlスニペットを持っています

$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 プログラムにパイプするシステム コールを発行しようとします。私はそれを機能させることができませんでした。誰でも方法を教えてもらえますか?

4

2 に答える 2

2

Perl から直接 bash を呼び出すことはできません。ただし、を使用するsystemと、おそらくプロセス置換をサポートしていない /bin/sh が呼び出されます。

考えられる回避策の 1 つは、

system qq(echo 'java -jar ttt.jar  <($normal_pileup) <($tumor_pileup) output' | bash);
于 2012-08-29T09:52:42.043 に答える
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`;

bashPerlコマンドではありません。

`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 `
于 2012-08-29T09:18:12.687 に答える