我試圖讓下面的perl腳本工作。首先,讀取fastq文件,然後使用該文件通過多個程序進行分析。嘗試使用PBS運行腳本時出現open3錯誤::客戶端
代碼:
use warnings;
use PBS::Client;
$directory = $ARGV[0];
opendir(DIR, $directory);
@files=();
while ($file = readdir(DIR)) {
push(@files, $file);
}
closedir(DIR);
@fastq_files = grep(/fastq/, @files);
$client = PBS::Client->new();
foreach $fastq (@fastq_files){
@commands =();
$wd = "/store/www/labresults_QC/snRNA_sequence_analyser/".$ARGV[0];
$name = $fastq."_process_map";
$queue = "system";
$wallt = "72:00:00";
chomp($fastq);
$fastq =~ /.+[^\.fastq]/;
push (@commands, "/opt/fastx_toolkit-0.0.13.2/bin/fastq_quality_filter -q 30 -p 80 -i " . $fastq . " -o ";
push (@commands, "/opt/fastx_toolkit-0.0.13.2/bin/fastx_clipper -i " . $& . "_qc.fastq -o " . $& . "_qc_clipped.fastq -v -l 15 -a TGGAATTCTCGGGTGCCAAGG -Q33\n");
push (@commands, "/opt/fastx_toolkit-0.0.13.2/bin/fastx_collapser -i " . $& . "_qc_clipped.fastq -o " . $& . "_qc_clipped_collapse.fa -v -Q33\n");
push (@commands, "/opt/bowtie-1.0.0/bowtie -f /opt/genomes/9606/GRCh37/bowtie/GRCh37 " . $& . "_qc_clipped_collapse.fa " . $& . "_mapped.sam -k 100 -n 0 -l 25 --best");
$job = PBS::Client::Job -> new(
wd => $wd,
queue => $queue,
name => $name,
wallt => $wallt,
cmd => [[@commands]]);
$client -> qsub($job);
}
然而,試圖通過Linux命令行來執行時,它使此錯誤消息:
open3: exec of /store/www/labresults_QC/snRNA_sequence_analyser/data/data_raw/test_run/n8XyeYIkfv failed at /store/bin/perl_libs/lib/perl5//PBS/Client.pm line 150
該錯誤消息指向這一段代碼在PBS客戶端模塊:
#-------------------------------------------------------------------
# Thanks to Sander Hulst
sub call_qsub
{
my @args = @_;
# If the qsub command fails, for instance, pbs_server is not running,
# PBS::Client's qsub should not silently ignore. Disable any reaper
# functions so the exit code can be captured
use Symbol qw(gensym);
use IPC::Open3;
my $stdout = gensym();
my $stderr = gensym();
{
local $SIG{CHLD} = sub{};
my $pid = open3(gensym, $stdout, $stderr, @args); # This is line 150
waitpid($pid,0);
}
confess <$stderr> if ($?);
return <$stdout>;
}
#-------------------------------------------------------------------
任何人都知道這意味着什麼?
編輯
經過一番調查似乎這行失敗:$client -> qsub($job);
,但我不知道爲什麼。任何想法我做錯了什麼?
最後編輯:
所以,我們終於發現了問題的真正原因。事實證明,我們所做的最新安裝PBS::Client
出了問題。所以我們回到了一個較舊的版本,問題就此消失了!
添加'使用嚴格的;'到文件的頂部,並宣佈(用'my')所有的變量,強烈推薦,因爲它可以防止很多簡單的錯誤。你看過** PBS Client **模塊的第150行和它的文檔嗎?檢查導致第150行的代碼應該提供一些關於正在發生的事情以及爲什麼報告錯誤的線索。 – AdrianHHH
我已經做了'嚴格使用'和'我的',但是它發生了這個錯誤。錯誤點所在的行並沒有讓我明白... – Fingashpitzzz
我包含** PBS客戶端的相關代碼** – Fingashpitzzz