Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Подземелье Магов
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  14:55[Войти] | [Зарегистрироваться]

Обсуждение материала
StdIn, StdOut и StdErr. Перенаправление, чтение и запись.
Полный текст материала


Другие публикации автора: Сергей Горбань

Цитата или краткий комментарий:

«... ЗАДАЧА: запустить процесс (некий файл), передать ему команды и получить от него результаты работы. Вставить полученные результаты на страницу сайта. Причем в целях совместимости механизмы передачи данных ДОЛЖНЫ быть стандартными - StdIn, StdOut, StdErr. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]1292.3%
 
  Ничего особенно нового и интересного
[2]17.7%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 13

Оценка стиля изложения

  Все понятно, материал читается легко
[1]1090.9%
 
  Есть неясности в изложении
[2]19.1%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 11




Смотрите также материалы по темам:
[Mailslot, pipes] [Ввод/вывод (StdIn/StdOut)]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 17

17-03-2009 08:21
sonmax: Хотя там и другие варианты возможны: Unicode tip #9 - Console Output


17-03-2009 02:19
Под седьмыми делфями все нормально работает, а в CG-2009 проблемы с кодировкой.
Нужно в  ReadStrFromChild и WriteStrToChild  String на AnsiString поменять. Для быстрого решения простой задачи - этот вариант как раз.


22-02-2009 04:02
Есть траблы небольшие - у меня ping возвращает строку в OEM-кодировке, а CMD, например, в ANSI, т.е. нельзя предугадать, что я получу в результате роботы этой программы. Для первого случая нужно использовать OEMToANSI, но тогда во втором случае получаются крякозябры:) Но в целом статья очень хорошая:)


08-08-2008 16:21
Отличная статья. Хотя время консольных приложений ушло, но всетаки очень интересно и поучительно.
Из минусов можно отметить отсутствие описания по StdErr. Но это не столь важно.


10-04-2008 06:06
Очень полезное содержание, даже не смотря на давность все еще сохраняет свою актуальность!


13-10-2006 20:33
Опрос - самая непродуктивная деятельность процессора, наряду со Sleep() это вообще самое безграмотное из работающего :-)
Значить, во-первых есть overlapped IO, во во-вторых есть функции типа WaitFor, я думаю, автору не составит большого труда перепеисать цикл опроса (судя по всему, доки читать он умеет), а идея следующая - в цикле ждать набор хэндлов: процесса (на предмет завершения консольного процесса) и события, ассоциированного с overlapped io
Сообщение не подписано


29-06-2006 22:41
2Max Chistyakov
Получение текста консольного окна по его Handle

Исходник тут (D5, правда работать будет только под XP):
http://www.wasm.ru/forum/files/1972767194__ConsoleScreenBuffer.rar



15-12-2005 07:07
Автору спасибо! Прям то что мне нужно!


28-11-2005 09:53
Толково и очень полезно
Сообщение не подписано


06-09-2005 01:46
кстати, вместо GetMem/FreeMem(chbuf) вполне достаточно описать chbuf как array[0..1024] of Char, а не PChar и забыть про проблемы с памятью


03-08-2005 05:30
Отмечу, что модуль в принципе верен. Но для многопоточного использования подходит плохо.

Я поправил ряд мест, показавшихся мне наиболее "ошибкоопасными".

В частности, привожу поправленную версию функции чтения:

function TChildProc.ReadStrFromChild(Timeout: Integer): String;
Var
i: Integer;
dwRead, DesBufSize: DWORD;
chBuf: PChar;
Res: Boolean;
begin
GetMem(chBuf, 1024);
Try
Repeat
For i:=0 to 9 do
begin   Res:=PeekNamedPipe(FChildStdoutRd, nil, 0, nil, @DesBufSize, nil);
Res:=Res and (DesBufSize > 0);
If Res Then Break;
Sleep(Round(Timeout/10));
end;
If Res Then
begin   Res:=ReadFile(FChildStdoutRd, chBuf^, 1024, dwRead, Nil);     Result:=Result+LeftStr(chBuf, dwRead);
end;
Until not Res;
Except
Result:='Read Err';
End;
FreeMem(chbuf);
end;

Я понимаю, что работа с памятью здесь тоже далека от совершенства, но по крайней мере мой веб-сервер не вылетает по нехватке памяти :-)))
 slow


08-01-2003 18:23
идея сама по себе стара, только вот качество кода просто пугает!

function TChildProc.ReadStrFromChild(Timeout: Integer): String;

я думаю этой функции достаточно понять почему (она как раз в статье полностью представлена!)
1. Сказал "New" - скажи "Dispose"
2. Эээ.... только это не к данному моменту! тут вообще непонятно к чему New!

вобщем работа с памятью просто безжалостная! я не удивлюсь если этот вэб сервер раз в сутки перегружают по нехватке памяти!



24-12-2002 09:57
Замечательная статья, спасибо Сергею, но...

У меня вопрос: как всё это будет себя вести под Win98?


23-12-2002 23:51
Это все хорошо, но может быть кто-нить знает как получить содержимое консольного окна в виде текста если известен его handle? Уже пару лет пытаюсь найти решение этой задачи :(( Ведь винда это как-то делает (Правка -> Выделить -> Копировать... и т.п.)


23-12-2002 21:31
А вот это что за чудо:
chBuf:=PChar(Data+Chr($0D)+Chr($0A));

Надо б так:
chBuf:=PChar(Data+#13#10);

Зачем через Chr?



23-12-2002 20:19
Да, забыл подписаться. У кого есть ответ на мой вопрос или способ решения моей проблемы - буду благодарен за ответ на e-mail.


23-12-2002 20:17
А чем не понравился способ:

AllocConsole
CreateProces // с наследованием Handle-ов stdin, stdout
WriteConsoleInput
FreeConsole

Я когда-то хотел написать свой telnet-сервер, но ничего не вышло, т.к. я не смог написать программу, которая бы порождала несколько дочерних процессов ОДНОВРЕМЕННО и НЕЗАВИСИМО могла бы передавать данные в stdin каждого дочернего процесса. Со stdout дочерних процессов проблема решилась CreateConsoleScreenBuffer, то есть каждый дочерний процесс писал в свой отдельный ScreenBuffer, откуда я мог получить результат работы. А вот с stdin как быть - не знал - чтобы только в нужный дочерний процесс на его stdin передать данные.

А ваш вариант подойдет для управления несколькими дочерними процесами (независимый контроль stdin и stdout) ?

P.S - пошел пробовать.
Сообщение не подписано


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Два кольца, два конца, посередине гвоздик.
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования