информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsЗа кого нас держат?Spanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Запустить в телнете/ssh? Перенаправить вывод на smb-ресурс? Или внутри софтины (через пайп)? 07.09.12 11:17  Число просмотров: 4824
Автор: Ustin <Ustin> Статус: Elderman
Отредактировано 07.09.12 12:19  Количество правок: 6
<"чистая" ссылка>
up: на сервере: unxutils, cmd /c soft.exe >> \\srv\share\1.out
на клиенте: unxutils, tail -f \\srv\share\1.out |grep...
но 1.out сильно распухнет, поэтому, ИМХО, лучше собирать вывод софтово.
---
Если софтово - пример на делпхи, жрёт stdout и stderr.
Пример рассчитан на запуск винрара, поэтому парсить надо внутри while.
function GetDosOutput(const CmdLine:string;Params:String):string;overload; 
var 
  SA: TSecurityAttributes; 
  SI: TStartupInfo; 
  PI: TProcessInformation; 
  StdOutPipeRead, StdOutPipeWrite: THandle; 
  WasOK: Boolean;
  Buffer: array[0..255] of Char;
  BytesRead: Cardinal; 
  WorkDir, Line: String; 
begin 
  with SA do 
  begin 
    nLength := SizeOf(SA); 
    bInheritHandle := True; 
    lpSecurityDescriptor := nil; 
  end; 
  // создаём пайп для перенаправления стандартного вывода 
  CreatePipe(StdOutPipeRead,  // дескриптор чтения 
             StdOutPipeWrite, // дескриптор записи 
             @SA,              // аттрибуты безопасности 
             0                // количество байт принятых для пайпа - 0 по умолчанию 
             );

    // Создаём дочерний процесс, используя StdOutPipeWrite в качестве стандартного вывода, 
    // а так же проверяем, чтобы он не показывался на экране. 
    with SI do 
    begin 
      FillChar(SI, SizeOf(SI), 0); 
      cb := SizeOf(SI); 
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; 
      wShowWindow := SW_HIDE; 
      hStdInput := GetStdHandle(STD_INPUT_HANDLE); // стандартный ввод не перенаправляем 
      hStdOutput := StdOutPipeWrite; 
      hStdError := StdOutPipeWrite; 
    end; 

    // Запускаем компилятор из командной строки
    WorkDir := ProcessPath(CmdLine,PPPT_PARENTDIR);
    WasOK := CreateProcess(PChar(CmdLine),PChar(Params) ,nil, nil, True, 0, nil, PChar(WorkDir), SI, PI); 

    // Теперь, когда дескриптор получен, для безопасности закрываем запись. 
    // Нам не нужно, чтобы произошло случайное чтение или запись. 
    CloseHandle(StdOutPipeWrite);  
    // если процесс может быть создан, то дескриптор, это его вывод 
    if WasOK then
        // получаем весь вывод до тех пор, пока DOS-приложение не будет завершено 
        Line := ''; 
        repeat 
          // читаем блок символов (могут содержать возвраты каретки и переводы строки) 
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil); 

          // есть ли что-нибудь ещё для чтения? 
          if BytesRead > 0 then 
          begin 
            // завершаем буфер PChar-ом 
            Buffer[BytesRead] := #0; 
            // добавляем буфер в общий вывод 
            Line := Line + Buffer; 
          end; 
        until not WasOK or (BytesRead = 0); 
        // ждём, пока завершится консольное приложение 
        WaitForSingleObject(PI.hProcess, INFINITE); 
        // Закрываем все оставшиеся дескрипторы 
        CloseHandle(PI.hThread); 
        CloseHandle(PI.hProcess); 
      result:=Line;
      CloseHandle(StdOutPipeRead);
end; 

---
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach