Stdin/Stdout/stderr + crt библиотекв

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Stdin/Stdout/stderr + crt библиотекв

Сообщение xhermit » 20.05.2022 06:07:49

Здравствуйте, Форумчане
Столкнулся с проблемой которую хочется обойти:
Создаю консольное приложение HelloWorld
Вызываю project1.exe >debug.log - в debug.log записывается Hello World
Импортирую модуль crt
Вызываю project1.exe >debug.log - debug.log пустой
Что происходит? Ктонить может мне квалифицированно разъяснить?
Может кто сталкивался?
Использую crt для отладки консольных приложений для раскраски текста в консоли Windows
Может можно заменить crt на другую библиотеку?

Пример:
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes, SysUtils, CustApp,
  crt;

type

  { TMyApplication }

  TMyApplication = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
    procedure WriteHelp; virtual;
  end;

{ TMyApplication }

procedure TMyApplication.DoRun;
var
  ErrorMsg: String;
begin
  // quick check parameters
  ErrorMsg:=CheckOptions('h', 'help');
  if ErrorMsg<>'' then begin
    ShowException(Exception.Create(ErrorMsg));
    Terminate;
    Exit;
  end;

  // parse parameters
  if HasOption('h', 'help') then begin
    WriteHelp;
    Terminate;
    Exit;
  end;

  { add your program here }
  writeln('Hello World!!!');

  // stop program loop
  Terminate;
end;

constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;

destructor TMyApplication.Destroy;
begin
  inherited Destroy;
end;

procedure TMyApplication.WriteHelp;
begin
  { add your help code here }
  writeln('Usage: ', ExeName, ' -h');
end;

var
  Application: TMyApplication;
begin
  Application:=TMyApplication.Create(nil);
  Application.Title:='My Application';
  Application.Run;
  Application.Free;
end.

xhermit
незнакомец
 
Сообщения: 4
Зарегистрирован: 16.03.2018 06:49:34

Re: Stdin/Stdout/stderr + crt библиотекв

Сообщение Vadim » 20.05.2022 15:38:43

xhermit
Что интересно, в Linux, в отличие от винды, такого не наблюдается - что без CRT, что с CRT спокойно пересылает из консольной программы текст в файл.
Скорее всего создаётся какая-то дополнительная консоль, с которой стандартные перенаправители не работают
У меня винды под рукой нет, проверить не могу, попробуйте для интереса вместо
Код: Выделить всё
WriteLn('Hello world!');

написать:
Код: Выделить всё
WriteLn(stdout, 'Hello world 1!');
WriteLn(stderr, 'Hello world 2!');

и скажите, что у Вас получилось.
Vadim
долгожитель
 
Сообщения: 4086
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Stdin/Stdout/stderr + crt библиотекв

Сообщение sts » 20.05.2022 16:35:26

xhermit писал(а):Импортирую модуль crt
Вызываю project1.exe >debug.log - debug.log пустой

при этом на экран выводится?
sts
постоялец
 
Сообщения: 315
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Stdin/Stdout/stderr + crt библиотекв

Сообщение xhermit » 23.05.2022 04:37:38

Код: Выделить всё
WriteLn(stdout, 'Hello world 1!');
WriteLn(stderr, 'Hello world 2!');


Это помогло.
Hello world1 - попал в debug.log
А Hello World2 - на консоль
Спасиб, друг

Добавлено спустя 36 секунд:
>>>при этом на экран выводится?
Не выводиться
xhermit
незнакомец
 
Сообщения: 4
Зарегистрирован: 16.03.2018 06:49:34


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru