Отправить стандартный вывод в файл без тройника - PullRequest
2 голосов
/ 14 октября 2011

Я работаю на Windows XP, и мне было интересно, есть ли в любом случае получить вывод из stdout и записать его в файл. Мне нужно иметь возможность записи в консоль и файл, но использование чего-то вроде tee не сработает.

Мой босс работает над приложением, которое занимает некоторое время, и пишет в консоль. В конце он хочет перемотать стандартный вывод для некоторых строк и затем записать вывод в файл. Он считает, что запись в файл каждый раз, когда что-то записывается на экран, - это слишком много ввода-вывода. Я могу быть совершенно не прав, но разве так не работает команда tee? Stdout направляется в тройник, который затем записывает вывод в консоль, а затем в назначенный файл.

Возможно ли это? Я знаю, что stdout - это дескриптор файла, поэтому я подумал, что это возможно, потому что вы можете перематывать другие файлы, но это только для записи stdout? В Unix я знаю, что stdout - это файл dev / stdout.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 октября 2011

Вы можете использовать канал, чтобы перенаправить стандартный вывод в файл.Вы можете отобразить содержимое файла позже.

Посмотрите на этот пример: Создание дочернего процесса с перенаправленным вводом и выводом

0 голосов
/ 14 октября 2011

Это то, для чего предназначен (или вообще перенаправляет потоки). Строго говоря, вы не можете «перематывать» стандартный вывод. Вот почему вы бы перенаправили его в другое место, если бы вам понадобилось просмотреть его данные позже.

Я с подозрением отношусь к утверждению «слишком много операций ввода-вывода для записи в файл и на консоль»: мне это отдает преждевременной оптимизацией. Однако, предполагая, что это действительно так ... И предполагая, что вы не хотите перенаправлять вывод, единственный другой вариант, который я вижу, - это удерживать его в памяти до тех пор, пока вы не будете готовы его записать. Вы могли бы придумать причудливую схему, которая бы выделяла блок памяти и записывала в него (и консоль), а затем сбрасывала его, когда он заполнялся ... но это кажется большим количеством проблем.

Сколько мы говорим здесь?

...