У меня есть скрипт perl, который порождает 3 потока и использует общую очередь для вытягивания заданий. У меня есть файл журнала для каждого потока.Перенаправить STDOUT для определенной темы в Perl
Что я пытаюсь сделать, это перезаписать STDOUT для этого потока, чтобы все действия в этом потоке печатались в файле журнала, а не в терминале.
Когда я начало каждой нити, есть этот
open (STDOUT, '>>', 'log'.$tid.'.txt');
Это перезаписывает STDOUT для всех потоков Unfortunatelly, поэтому у меня есть все модули log3.txt.
Как я могу STDOUT только перезаписывать/перенаправлять текущий поток?
Редактировать: Я попытался SELECT и локальный * STDOUT, моя проблема в том, что каждый поток вызывает .exe, который я хочу, чтобы он выводил на измененный STDOUT, и это не происходит с SELECT и LOCAL.
Возможно, вместо того, чтобы пытаться перезаписать STDOUT, вы можете перенаправить вывод .exe с оператором >> как 'system (" program.exe >> log ". $ tid.". txt ");' в каждом потоке соответственно? – Mariusz
Какую модель/модуль вы используете для нарезки? – zdim
Если ваши потоки называют exe, почему бы вместо этого не использовать 'open' и просто прочитать его как дескриптор файла? – Sobrique