#windows #stdout #tee
#Windows #стандартный вывод #tee
Вопрос:
Я работаю над Windows XP, и мне было интересно, можно ли в любом случае получить вывод из стандартного вывода и записать его в файл. Мне нужно иметь возможность записывать в консоль и файл, но использование чего-то вроде tee не будет работать.
Мой босс работает над приложением, которое занимает некоторое время, и он пишет на консоль. В конце он хочет перемотать стандартный вывод на несколько строк, а затем записать выходные данные в файл. Он считает, что запись в file каждый раз, когда что-то записывается на экран, — это слишком много операций ввода-вывода. Возможно, я совершенно не прав, но разве не так работает команда tee? Стандартный вывод передается в tee, который затем записывает выходные данные на консоль, а затем в указанный файл.
Возможно ли это? Я знаю, что стандартный вывод — это дескриптор файла, поэтому я подумал, что это должно быть возможно, потому что вы можете перематывать другие файлы, но доступен ли стандартный вывод только для записи? Я знаю в Unix, что стандартный вывод — это файл dev / stdout.
Спасибо
Комментарии:
1. Вы должны заставить своего босса задать свой собственный вопрос. Иначе он не поймет, насколько безумен его план.
Ответ №1:
Для этого и предназначен tee (или перенаправление потоков в целом). Строго говоря, вы не можете «перемотать» стандартный вывод. Вот почему вы перенаправили бы его в другое место, если бы вам понадобилось просмотреть его данные позже.
Я с подозрением отношусь к утверждению «слишком много ввода-вывода для записи в файл и на консоль»: для меня это попахивает преждевременной оптимизацией. Однако, предполагая, что это действительно так…И если предположить, что вы не хотите перенаправлять свой вывод, единственный другой вариант, который я вижу, — это хранить его в памяти, пока вы не будете готовы его записать. Вы могли бы придумать причудливую схему, которая выделяла блок памяти и записывала в него (и в консоль), а затем сбрасывала его, когда он заполнялся … но это кажется большой проблемой.
О каком объеме ввода-вывода мы здесь говорим?
Комментарии:
1. На самом деле это не так много операций ввода-вывода. Программа просто должна быть быстрой, но я не думаю, что это добавит слишком много времени, потому что записи происходят до и после вычислений. Между ними есть несколько разбросанных. Tee определенно решил бы его проблему. По сути, цель состоит в том, чтобы иметь возможность видеть программу во время ее запуска, а также иметь копию для последующего просмотра. Я подумал, что tee, вероятно, лучший выбор, но я не знал, была ли моя предложенная альтернатива просто непопулярной или невозможной.
Ответ №2:
Вы можете использовать канал для перенаправления стандартного вывода в файл. Содержимое файла можно отобразить позже.
Взгляните на этот пример: создание дочернего процесса с перенаправленным вводом и выводом