Linux как отправить команду в консоль

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

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

Ответить
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Linux как отправить команду в консоль

Сообщение Sawer »

Ручной алгоритм такой
Запускаем в консоли "./home/test13", нажимаем "Enter", набираем "adc1", нажимаем "Enter", смотрим данные...

Как сделать в программе?

Код: Выделить всё

begin
  fpSystem('/home/test13');
  ЧТО ЗДЕСЬ??? КАК ОТПРАВИТЬ КОМАНДУ?
end.
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

Консоль - это программа, которая интерпретивует работу bash, его вывод и прочее, исходя из этого и надо создавать программу...
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

wavebvg писал(а):Консоль - это программа, которая интерпретивует работу bash, его вывод и прочее, исходя из этого и надо создавать программу...

какой функцией послать команду?
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Код: Выделить всё

TProcess.InputStream.Write()
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

Вот такой код получился:

Код: Выделить всё

program run;

uses
unix, baseunix, process, classes;

var MyProc: TProcess;
    S: string;
    StrList: TStringList;

begin
  MyProc := TProcess.Create(nil);
  StrList := TStringList.Create;
  MyProc.Options := MyProc.Options + [poWaitOnExit, poUsePipes];
  MyProc.CommandLine := './test13';
  MyProc.Execute;
  S := 'adc1'+LineEnding;
  MyProc.Input.Write(S[1], Length(S));
  StrList.LoadFromStream(MyProc.Output);
  StrList.SaveToFile('run-out');   
  StrList.Free;
  MyProc.Free;
end.

не работает!! почему может быть? помогите!
программа запускается и через 3-4 сек. закрывается! ничего не пишет в консоль или файл.
"run" и "test13" в одной директории!

Добавлено спустя 9 минут 7 секунд:
v-t-l писал(а):

Код: Выделить всё

TProcess.InputStream.Write()

InputStream нет... есть Input только (fpc 2.2.0, 2.2.3)
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Глянь на класс TExProcess в этой ветке:
http://freepascal.ru/forum/viewtopic.php?f=1&t=2311&p=15380&hilit=TExProcess#p15380
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

спасибо всем кто отписался! надо было добавить Sleep!
итоговый код такой:

Код: Выделить всё

program run;

uses
unix, baseunix, process, classes;

var MyProc: TProcess;
    S: string;
    StrList: TStringList;

begin
  MyProc := TProcess.Create(nil);
  StrList := TStringList.Create;
  MyProc.Options := MyProc.Options + [poUsePipes];
  MyProc.CommandLine := './test13';
  MyProc.Execute;
  Sleep(200);
  S := 'adc1'+LineEnding;
  MyProc.Input.Write(S[1], Length(S));
  StrList.LoadFromStream(MyProc.Output);
  StrList.SaveToFile('run-out');   
  StrList.Free;
  MyProc.Free;
end.

кому интересно тоже самое на AssignStream:

Код: Выделить всё

program run;

uses
unix, baseunix, process, classes;

var s: string; strlst: TStringList;
    si, so : Text;
    args: ansistring;
begin
  strlst := TStringList.Create;
  args := '';
  AssignStream (si,so,'./test13',[args]);
  if fpgeterrno<>0 then
  begin
    writeln ('AssignStream failed !');
    halt(1);
  end;
  sleep(200);
  writeln(so,'adc1');
  repeat   
    readln(si,s);
    strlst.add(s);
    writeln (s);
  until eof(si);
  strlst.SaveToFile('run-out');
  close(si);
  close(so); 
end.
Ответить