so I call an external program in perl and want to capture it's output:

my @RNAalifoldOut = `RNAalifold some parameters`;

If called from command line the output consists of three lines, e.g:

4 sequences; length of alignment 48.
__GCCGA_UGUAGCUCAGUUGGG_AGAGCGCCAGACUGAAAAUCAGA 
...((((.....((((.........)))).(((((.......)))))

However my array @RNAalifoldOut contains only the two last lines and the first line appears directly on the screen when the line is being executed.

How can this be? I thought maybe the program writes the first line to STDERR, but isn't that discarded by the backticks operator? And what could I do to hide this output?

Regards Nick

有帮助吗?

解决方案

You are likely seeing the standard error from RNAalifold. Backticks capture only the standard output.

Capture both standard output and standard error by changing your code to

my @RNAalifoldOut = `RNAalifold some parameters 2>&1`;

To discard the standard error, use

my @RNAalifoldOut = `RNAalifold some parameters 2>/dev/null`;

on Unix-like platforms. On Windows, use

my @RNAalifoldOut = `RNAalifold some parameters 2>nul`;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top