Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Аналог ShellExecute под LAZARUS  (Прочитано 5964 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн FluffyMan

  • Автор темы
  • Активист
  • *
  • Сообщений: 276
  • Debian 6
    • Просмотр профиля
Аналог ShellExecute под LAZARUS
« : 15 Мая 2011, 18:41:48 »
в делфи есть процедура или функция, не помню точно, ShellExecute. есть ли аналог для лазаруса?
мне нужно из приложения вызвать консольную команду с параметрами. к примеру по нажатию кнопки происходил происходил  ping x, где x-заданный в моей программе адрес. это возможно?

Оффлайн ZwS

  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Re: Аналог ShellExecute под LAZARUS
« Ответ #1 : 15 Мая 2011, 18:50:55 »
http://wiki.freepascal.org/Executing_External_Programs/ru

uses Process;
var AProcess: TProcess;

...

AProcess := TProcess.Create(nil);
Aprocess.CommandLine := 'ping ' + x;
AProcess.Options := [];
AProcess.Execute;
AProcess.Free;
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

Оффлайн FluffyMan

  • Автор темы
  • Активист
  • *
  • Сообщений: 276
  • Debian 6
    • Просмотр профиля
Re: Аналог ShellExecute под LAZARUS
« Ответ #2 : 15 Мая 2011, 19:59:48 »
хорошо, работает.
но не могли бы Вы привести пример с использованием конвеера?
к примеру
cat /home/user/text.txt | festival --tts --language russian
Пользователь решил продолжить мысль 15 Мая 2011, 20:17:33:
var
  Form1: TForm1;
  a,b:TProcess;

procedure TForm1.Button1Click(Sender: TObject);
begin
a := TProcess.Create(nil);
b := TProcess.Create(nil);
a.CommandLine := 'cat /home/fluffy/q.txt';
a.Options := [poUsePipes];
a.Execute;
b.CommandLine := a.Output + 'festival --tts --russian';
a.Free;
b.Free;
end;
так не компилится. выдеат ошибку  
Цитировать
unit1.pas(39,27) Error: Operator is not overloaded
unit1.pas(48) Fatal: There were 1 errors compiling module, stopping
« Последнее редактирование: 15 Мая 2011, 20:18:38 от Fluffy1234567890 »

Оффлайн Sam Stone

  • Старожил
  • *
  • Сообщений: 1131
    • Просмотр профиля
Re: Аналог ShellExecute под LAZARUS
« Ответ #3 : 15 Мая 2011, 20:44:21 »
Какая из этих строчек номер 39?
Jellyfish 6.5.0-45-generic
2690v4 64Gb

Оффлайн FluffyMan

  • Автор темы
  • Активист
  • *
  • Сообщений: 276
  • Debian 6
    • Просмотр профиля
Re: Аналог ShellExecute под LAZARUS
« Ответ #4 : 15 Мая 2011, 20:47:35 »
b.CommandLine := a.Output + 'festival --tts --russian';кажется эта. но мне кажется, что эта конструкция неправильная. сама по себе. "вывод команды КЭТ + фестивал"

Оффлайн ZwS

  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Re: Аналог ShellExecute под LAZARUS
« Ответ #5 : 15 Мая 2011, 22:02:43 »
вообщем a.Output не является обычным стрингом и пихать его туда нельзя.
property Output: TInputPipeStream; [r]     Stream connected to standard output of the process.по той ссылке есть пример с подобной ситуацией
   // Зададим командную строку
   AProcess.CommandLine := 'ppc386 -h';
 
   // Установим опции программы. Первая из них не позволит нашей программе
   // выполнятся до тех пор, пока не закончит выполнение запущенная программа
   // Также добавим опцию, которая говорит, что мы хотим прочитать
   // вывод запущенной программы
   AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
 
   // Теперь запускаем программу
   AProcess.Execute;
 
   // Пока запущенная программа не закончится, досюда мы не дойдем
 
   // А теперь прочитаем вывод в список строк TStringList.
   AStringList.LoadFromStream(AProcess.Output);
 
   // Сохраним вывод в файл
   AStringList.SaveToFile('output.txt');
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

Оффлайн FluffyMan

  • Автор темы
  • Активист
  • *
  • Сообщений: 276
  • Debian 6
    • Просмотр профиля
Re: Аналог ShellExecute под LAZARUS
« Ответ #6 : 15 Мая 2011, 22:14:27 »
ситуация подобная. но совсем не то, что нужно. там вывод программы в файл записывается. а мне надо передать вывод следущей команде.

Оффлайн Not eXist

  • Активист
  • *
  • Сообщений: 916
    • Просмотр профиля
Re: Аналог ShellExecute под LAZARUS
« Ответ #7 : 15 Мая 2011, 22:51:57 »
Цитировать
в делфи есть процедура или функция, не помню точно, ShellExecute. есть ли аналог для лазаруса?
Это метод WinAPI, причём тут Делфи?

Оффлайн FluffyMan

  • Автор темы
  • Активист
  • *
  • Сообщений: 276
  • Debian 6
    • Просмотр профиля
Re: Аналог ShellExecute под LAZARUS
« Ответ #8 : 15 Мая 2011, 22:52:41 »
имелось в виду, что этот способ работает только под виндой.

Пользователь решил продолжить мысль 16 Мая 2011, 14:17:51:
Цитировать
но не могли бы Вы привести пример с использованием конвеера?
к примеру
cat /home/user/text.txt | festival --tts --language russian

не верю, что никто с таким не сталкивался. поделитесь опытом :)
« Последнее редактирование: 16 Мая 2011, 14:17:51 от Fluffy1234567890 »

 

Страница сгенерирована за 0.049 секунд. Запросов: 25.