Можно ли перенаправить стандартный вывод так, чтобы это подействовало на все операции вывода, а не только моей программы? И чтобы перенаправление сохранилось и после завершения моей программы?
Здравствуйте mitq, Вы писали:
M>Здравствуйте.
M>Можно ли перенаправить стандартный вывод так, чтобы это подействовало на все операции вывода, а не только моей программы? И чтобы перенаправление сохранилось и после завершения моей программы?
M>Спасибо, M>Дмитрий.
Здравствуйте flyker, Вы писали:
M>>Можно ли перенаправить стандартный вывод так, чтобы это подействовало на все операции вывода, а не только моей программы? И чтобы перенаправление сохранилось и после завершения моей программы?
F>Вирус чтоли пишешь ???
Да нет, просто нужно, чтобы из bat-файла можно было сделать так:
1) Перенаправляем вывод в файл.
2) Вызываем некоторые программы, которые выдают отчет о работе на консоль.
3) В результате получаем файл отчета.
Здравствуйте mitq, Вы писали:
M> Да нет, просто нужно, чтобы из bat-файла можно было сделать так: M>1) Перенаправляем вывод в файл. M>2) Вызываем некоторые программы, которые выдают отчет о работе на консоль. M>3) В результате получаем файл отчета.
а если так:
program.exe > report.txt
консольный вывод программы program.exe сохранится в файле report.txt. Разве нужно не это?
Здравствуйте mitq, Вы писали:
M> Да нет, просто нужно, чтобы из bat-файла можно было сделать так: M>1) Перенаправляем вывод в файл. M>2) Вызываем некоторые программы, которые выдают отчет о работе на консоль. M>3) В результате получаем файл отчета.
а если так:
program.exe > report.txt
консольный вывод программы program.exe сохранится в файле report.txt. Разве нужно не это?
Здравствуйте mitq, Вы писали:
M>Здравствуйте Andrey_N_M, Вы писали:
ANM>>а если так: M>
M>program.exe > report.txt
M>
ANM>>консольный вывод программы program.exe сохранится в файле report.txt. Разве нужно не это?
M>Такое перенаправление перезаписывает файл, а нужно дописывать.
Здравствуйте Lexey, Вы писали:
L>А так? L>program.exe >> report.txt
Многократно извиняюсь за панику!
Когда ко мне обратили с такой просьбой, я посоветовал то же самое, однако мне ответили, что так не работает. Ну я и озадачился данной проблемой — подумал, что просто что-то путаю, когда-нибудь прочитал что-то левое, а оно и запомнилось (ну а проверить лень, конечно же, было). Надо разобраться. Может быть, еще вернусь.
а что за программа-то ? по-моему я это недавно уже делал. Геморрой страшный — через AllocConsole, и проч (надо — напишу подробнее, я в интернет-кафе, ума под рукой нет). Так работает компилятор ВС++ (он же перехватывает консольный вывод). НО ! Если, не дай бог у тебя установлено в настройках мс-дос "в полный экран", то при каждом запуске консольной программы экран будет моргать (менять режим на текстовый и обратно). Но если у тебя самого консольная прога, то никаких проблем. Еще можно посмотреть (как нибудь соберусь), как это сделано в Апаче по виндовс (веб-сервере). Например, РНР там оформлен консольной программой, на вход подается РНР-файл, а в стдаут выдается обычный НТМ-файл, который потом отправляется получателю. И ничего не мигает !
Во как я расписался...
Здравствуйте altconcept, Вы писали:
A>[...] A>Во как я расписался...
Необходимость в программе уже отпала (см. топики выше), однако все равно любопытно. Если не будет лень, то кинь пример на .
А программа должна была просто делать что-то типа:
// перенаправляем вывод в файл
switch.exe -file "out.txt"
// ...
// все консольные программы выводят в out.txt
// ...
// восстанавливаем вывод в stdout
switch.exe -std
Здравствуйте mitq, Вы писали:
M>Необходимость в программе уже отпала (см. топики выше), однако все равно любопытно. Если не будет лень, то кинь пример на .
Вот тебе что-то подобное: на Юнихах есть полезная утилита "tee". Она делает
следующее: пропускает данные stdout через себя, выводит их на консоль и в файл.
Как ею воспользоваться:
— запускаетшь команду "cmd <параметры для cmd> | tee logfile.txt"
— Вот и все. Вне зависимости от того набираешь ли ты команды в cmd руками
или там выполняется батник — весь оутпут будет в файле.
— Ложка дегтя — что будет при запуске ФАР-а или других программ которые
напрямую используют консольный вывод — я не знаю.
Здравствуйте TepMuHyc, Вы писали:
TMH>Вот тебе что-то подобное: на Юнихах есть полезная утилита "tee". Она делает TMH>следующее: пропускает данные stdout через себя, выводит их на консоль и в файл.
TMH>Где эту утилиу найти — попробуй http://ftpsearch.rambler.ru/ TMH>ищи "tee.exe"
На Rambler'е ничего не нашлось, а на Yandex'е — нашлось. Смотреть ссылку завтра буду — домой пора.
Здравствуйте altconcept, Вы писали:
A>а что за программа-то ? по-моему я это недавно уже делал. Геморрой страшный — через AllocConsole, и проч (надо — напишу подробнее, я в интернет-кафе, ума под рукой нет). Так работает компилятор ВС++ (он же перехватывает консольный вывод). НО ! Если, не дай бог у тебя установлено в настройках мс-дос "в полный экран", то при каждом запуске консольной программы экран будет моргать (менять режим на текстовый и обратно). Но если у тебя самого консольная прога, то никаких проблем. Еще можно посмотреть (как нибудь соберусь), как это сделано в Апаче по виндовс (веб-сервере). Например, РНР там оформлен консольной программой, на вход подается РНР-файл, а в стдаут выдается обычный НТМ-файл, который потом отправляется получателю. И ничего не мигает ! A>Во как я расписался...
Это все очень просто. Есть такая функция в Win32 — CreateProcess. В ея передается STARTUPINFO. В этом стартапинфо есть поля, в которых можно передать редиректнутые хэндлы консольного ввода-вывода. Всякие прибамбасы к виндам тима cmd.exe и explorer.exe это и делают.
Так что можешь хоть в named pipe средиректить.
Да, по умолчанию, консольный процесс, запущенный из cmd.exe, наследует консоль. Так что перманентно средиректить аутпут еще куда-нибудь тяжко.
То есть, чтобы работал батник вида