Перенаправление stdout
От: mitq Россия  
Дата: 03.04.02 04:08
Оценка:
Здравствуйте.

Можно ли перенаправить стандартный вывод так, чтобы это подействовало на все операции вывода, а не только моей программы? И чтобы перенаправление сохранилось и после завершения моей программы?

Спасибо,
Дмитрий.
Re: Перенаправление stdout
От: flyker Россия  
Дата: 03.04.02 06:21
Оценка:
Здравствуйте mitq, Вы писали:

M>Здравствуйте.


M>Можно ли перенаправить стандартный вывод так, чтобы это подействовало на все операции вывода, а не только моей программы? И чтобы перенаправление сохранилось и после завершения моей программы?


M>Спасибо,

M>Дмитрий.

Вирус чтоли пишешь ???
Все гениальное — просто
Re[2]: Перенаправление stdout
От: mitq Россия  
Дата: 03.04.02 06:28
Оценка:
Здравствуйте flyker, Вы писали:

M>>Можно ли перенаправить стандартный вывод так, чтобы это подействовало на все операции вывода, а не только моей программы? И чтобы перенаправление сохранилось и после завершения моей программы?


F>Вирус чтоли пишешь ???


Да нет, просто нужно, чтобы из bat-файла можно было сделать так:
1) Перенаправляем вывод в файл.
2) Вызываем некоторые программы, которые выдают отчет о работе на консоль.
3) В результате получаем файл отчета.

По-моему, это не вирус.
Re[3]: Перенаправление stdout
От: Andrey_N_M Россия  
Дата: 03.04.02 06:43
Оценка:
Здравствуйте mitq, Вы писали:

M> Да нет, просто нужно, чтобы из bat-файла можно было сделать так:

M>1) Перенаправляем вывод в файл.
M>2) Вызываем некоторые программы, которые выдают отчет о работе на консоль.
M>3) В результате получаем файл отчета.

а если так:
program.exe > report.txt

консольный вывод программы program.exe сохранится в файле report.txt. Разве нужно не это?
ICQ: 100287472
Re[3]: Перенаправление stdout
От: Andrey_N_M Россия  
Дата: 03.04.02 06:43
Оценка:
Здравствуйте mitq, Вы писали:

M> Да нет, просто нужно, чтобы из bat-файла можно было сделать так:

M>1) Перенаправляем вывод в файл.
M>2) Вызываем некоторые программы, которые выдают отчет о работе на консоль.
M>3) В результате получаем файл отчета.

а если так:
program.exe > report.txt

консольный вывод программы program.exe сохранится в файле report.txt. Разве нужно не это?
ICQ: 100287472
Re[4]: Перенаправление stdout
От: mitq Россия  
Дата: 03.04.02 06:48
Оценка:
Здравствуйте Andrey_N_M, Вы писали:

ANM>а если так:

program.exe > report.txt

ANM>консольный вывод программы program.exe сохранится в файле report.txt. Разве нужно не это?

Такое перенаправление перезаписывает файл, а нужно дописывать.
Re[5]: Перенаправление stdout
От: Lexey Россия  
Дата: 03.04.02 06:52
Оценка:
Здравствуйте mitq, Вы писали:

M>Здравствуйте Andrey_N_M, Вы писали:


ANM>>а если так:

M>
M>program.exe > report.txt
M>

ANM>>консольный вывод программы program.exe сохранится в файле report.txt. Разве нужно не это?

M>Такое перенаправление перезаписывает файл, а нужно дописывать.


А так?
program.exe >> report.txt
Re[6]: Перенаправление stdout
От: mitq Россия  
Дата: 03.04.02 07:00
Оценка:
Здравствуйте Lexey, Вы писали:

L>А так?

L>program.exe >> report.txt

Многократно извиняюсь за панику!
Когда ко мне обратили с такой просьбой, я посоветовал то же самое, однако мне ответили, что так не работает. Ну я и озадачился данной проблемой — подумал, что просто что-то путаю, когда-нибудь прочитал что-то левое, а оно и запомнилось (ну а проверить лень, конечно же, было). Надо разобраться. Может быть, еще вернусь.
Re[7]: Перенаправление stdout
От: altconcept www.altconcept.com
Дата: 04.04.02 03:18
Оценка:
а что за программа-то ? по-моему я это недавно уже делал. Геморрой страшный — через AllocConsole, и проч (надо — напишу подробнее, я в интернет-кафе, ума под рукой нет). Так работает компилятор ВС++ (он же перехватывает консольный вывод). НО ! Если, не дай бог у тебя установлено в настройках мс-дос "в полный экран", то при каждом запуске консольной программы экран будет моргать (менять режим на текстовый и обратно). Но если у тебя самого консольная прога, то никаких проблем. Еще можно посмотреть (как нибудь соберусь), как это сделано в Апаче по виндовс (веб-сервере). Например, РНР там оформлен консольной программой, на вход подается РНР-файл, а в стдаут выдается обычный НТМ-файл, который потом отправляется получателю. И ничего не мигает !
Во как я расписался...
Re[8]: Перенаправление stdout
От: mitq Россия  
Дата: 04.04.02 03:35
Оценка:
Здравствуйте altconcept, Вы писали:

A>[...]

A>Во как я расписался...

Необходимость в программе уже отпала (см. топики выше), однако все равно любопытно. Если не будет лень, то кинь пример на .
А программа должна была просто делать что-то типа:
// перенаправляем вывод в файл
switch.exe -file "out.txt"

// ...
// все консольные программы выводят в out.txt
// ...

// восстанавливаем вывод в stdout
switch.exe -std
Re[9]: Перенаправление stdout
От: TepMuHyc  
Дата: 04.04.02 11:42
Оценка:
Здравствуйте mitq, Вы писали:

M>Необходимость в программе уже отпала (см. топики выше), однако все равно любопытно. Если не будет лень, то кинь пример на .


Вот тебе что-то подобное: на Юнихах есть полезная утилита "tee". Она делает
следующее: пропускает данные stdout через себя, выводит их на консоль и в файл.

Как ею воспользоваться:
— запускаетшь команду "cmd <параметры для cmd> | tee logfile.txt"
— Вот и все. Вне зависимости от того набираешь ли ты команды в cmd руками
или там выполняется батник — весь оутпут будет в файле.
— Ложка дегтя — что будет при запуске ФАР-а или других программ которые
напрямую используют консольный вывод — я не знаю.

Где эту утилиу найти — попробуй http://ftpsearch.rambler.ru/
ищи "tee.exe"
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Re[10]: Перенаправление stdout
От: mitq Россия  
Дата: 04.04.02 12:10
Оценка:
Здравствуйте TepMuHyc, Вы писали:

TMH>Вот тебе что-то подобное: на Юнихах есть полезная утилита "tee". Она делает

TMH>следующее: пропускает данные stdout через себя, выводит их на консоль и в файл.

TMH>Где эту утилиу найти — попробуй http://ftpsearch.rambler.ru/

TMH>ищи "tee.exe"

На Rambler'е ничего не нашлось, а на Yandex'е — нашлось. Смотреть ссылку завтра буду — домой пора.
Re[11]: Перенаправление stdout
От: Kubyshev Andrey  
Дата: 04.04.02 12:39
Оценка:
Ne nado ni tee, ni kofee,
posmesti programmy s nuzhnym outputom v myreport.bat
a v globalnom batnike naprimer delai :

...prepare for report
myreport.bat > report.txt
...prepare for report 2
myreport.bat >> report.txt
....
Re[8]: Перенаправление stdout
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.04.02 15:11
Оценка:
Здравствуйте altconcept, Вы писали:

A>а что за программа-то ? по-моему я это недавно уже делал. Геморрой страшный — через AllocConsole, и проч (надо — напишу подробнее, я в интернет-кафе, ума под рукой нет). Так работает компилятор ВС++ (он же перехватывает консольный вывод). НО ! Если, не дай бог у тебя установлено в настройках мс-дос "в полный экран", то при каждом запуске консольной программы экран будет моргать (менять режим на текстовый и обратно). Но если у тебя самого консольная прога, то никаких проблем. Еще можно посмотреть (как нибудь соберусь), как это сделано в Апаче по виндовс (веб-сервере). Например, РНР там оформлен консольной программой, на вход подается РНР-файл, а в стдаут выдается обычный НТМ-файл, который потом отправляется получателю. И ничего не мигает !

A>Во как я расписался...

Это все очень просто. Есть такая функция в Win32 — CreateProcess. В ея передается STARTUPINFO. В этом стартапинфо есть поля, в которых можно передать редиректнутые хэндлы консольного ввода-вывода. Всякие прибамбасы к виндам тима cmd.exe и explorer.exe это и делают.
Так что можешь хоть в named pipe средиректить.
Да, по умолчанию, консольный процесс, запущенный из cmd.exe, наследует консоль. Так что перманентно средиректить аутпут еще куда-нибудь тяжко.
То есть, чтобы работал батник вида
redirect output "out.txt"
program.exe
redirect output -restore

надо переопределить свой же собственный stdOutput... По-моему, это невозможно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.