This is my code for running a samtools command internally, via Galaxy:


open INP,"< $ARGV[0]"
        or die "Cannot open file: $!";

$file = "$ARGV[1]";

open OUT, "> $file"
        or die "Cannot open file: $!";

@out = `/home/applications/samtools-0.1.7a/samtools view -bS $ARGV[0] 2>&1`;

print OUT @out;

close INP;
close OUT;

The 2>&1 is used to redirect the STDERR to STDOUT. When I run this in the console, it gives a non-empty file. But when run it in Galaxy, Galaxy can no longer find the path. This error message is given to me.

Traceback (most recent call last):
  File "/home/applications/galaxy-dist/lib/galaxy/jobs/runners/local.py", line 126, in run_job
    job_wrapper.finish( stdout, stderr )
  File "/home/applications/galaxy-dist/lib/galaxy/jobs/__init__.py", line 618, in finish
    dataset.set_meta( overwrite = False )
  File "/home/applications/galaxy-dist/lib/galaxy/model/__init__.py", line 874, in set_meta
    return self.datatype.set_meta( self, **kwd )
  File "/home/applications/galaxy-dist/lib/galaxy/datatypes/binary.py", line 179, in set_meta
    raise Exception, "Error Setting BAM Metadata: %s" % stderr
Exception: Error Setting BAM Metadata: /bin/sh: samtools: command not found

The weird thing is, when I remove the 2>&1 from the code and run it again in Galaxy, I am able to get this diagnostic message:

[samopen] SAM header is present: 66338 sequences.

This is the reason why I added the 2>&1 in the first place, so that this diagnostic message would be 'ignored' (since it is detected as an error).

Now, if the other code (the one without 2>&1) is able to produce the aforementioned diagnostic message, then I assume that it is able to at least execute the samtools command internally. But when I add the 2>&1, galaxy can no longer find the command. Do I need to specify a path somewhere in the galaxy-dist?

I apologize for the very long message.

Thanks in advance,

CL