Отправить стандартный вывод в file no tee

#windows #stdout #tee

#Windows #стандартный вывод #tee

Вопрос:

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

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

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

Спасибо

Комментарии:

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

Ответ №1:

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

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

О каком объеме ввода-вывода мы здесь говорим?

Комментарии:

1. На самом деле это не так много операций ввода-вывода. Программа просто должна быть быстрой, но я не думаю, что это добавит слишком много времени, потому что записи происходят до и после вычислений. Между ними есть несколько разбросанных. Tee определенно решил бы его проблему. По сути, цель состоит в том, чтобы иметь возможность видеть программу во время ее запуска, а также иметь копию для последующего просмотра. Я подумал, что tee, вероятно, лучший выбор, но я не знал, была ли моя предложенная альтернатива просто непопулярной или невозможной.

Ответ №2:

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

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