Внешняя программа, вызываемая с обратными кавычками, по-прежнему производит вывод

поэтому я вызываю внешнюю программу на perl и хочу записать ее вывод:

my @RNAalifoldOut = `RNAalifold some parameters`;

При вызове из командной строки вывод состоит из трех строк, например:

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

Однако мой массив @RNAalifoldOut содержит только две последние строки, а первая строка появляется прямо на экране, когда строка выполняется.

Как это может быть? Я подумал, может быть, программа записывает первую строку в STDERR, но разве это не отбрасывается оператором обратных кавычек? И что я мог сделать, чтобы скрыть этот вывод?

С уважением, Ник


person NiklasMM    schedule 23.05.2012    source источник


Ответы (1)


Вероятно, вы видите стандартную ошибку от RNAalifold. Обратные кавычки захватывают только стандартный вывод.

Захватите как стандартный вывод, так и стандартную ошибку, изменив свой код на

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

Чтобы избавиться от стандартной ошибки, используйте

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

на Unix-подобных платформах. В Windows используйте

my @RNAalifoldOut = `RNAalifold some parameters 2>nul`;
person Greg Bacon    schedule 23.05.2012