Скрипты в LAZARUS

Вопросы программирования и использования среды Lazarus.

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

Скрипты в LAZARUS

Сообщение alexsa » 19.06.2011 12:39:04

Всем привет!
(UBUNTU 11.04)
Вот такой вопрос у меня есть - Можно ли программно запустить на выполнение скрипт, типа того что мы пишем в консоли, и чтобы программа узнала, когда скрипт закончил свою работу?
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20

Re: Скрипты в LAZARUS

Сообщение Padre_Mortius » 19.06.2011 13:24:57

изучайте вопрос по TProcess
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Скрипты в LAZARUS

Сообщение alexsa » 19.06.2011 13:55:39

Padre_Mortius писал(а):изучайте вопрос по TProcess

Спасибо. Как сказала бы Машенька: "Давай-давай учиться" :D

Добавлено спустя 34 минуты 30 секунд:
Padre_Mortius писал(а):изучайте вопрос по TProcess

Зашел, почитал, попробовал - не получилось.

Что я должен сделать по аналогии, если в консоли я пишу:
Код: Выделить всё
cd /media/Файлы/Lazarus/Проекты/
upx --best Main

Я не пойму что я должен в таком случае написать здесь
Код: Выделить всё
AProcess.CommandLine := QuotedStr('upx --best Main /media/Файлы/Lazarus/Проекты/');
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20

Re: Скрипты в LAZARUS

Сообщение alex208210 » 19.06.2011 14:42:02

uses unix;
if fileexists('/media/Файлы/Lazarus/Проекты/main')=true then
begin
shell('bash -c "upx --best /media/Файлы/Lazarus/Проекты/main"');
showmessage('Бинарник упакован');
end;
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: Скрипты в LAZARUS

Сообщение Padre_Mortius » 19.06.2011 15:04:31

Код: Выделить всё
var
   AProcess: TProcess;
begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := 'upx --best /media/Файлы/Lazarus/Проекты/Main';
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   AProcess.Free;
end;
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Скрипты в LAZARUS

Сообщение alexsa » 19.06.2011 15:21:31

Padre_Mortius писал(а):
Код: Выделить всё
var
   AProcess: TProcess;
begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := 'upx --best /media/Файлы/Lazarus/Проекты/Main';
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   AProcess.Free;
end;

Здесь никто ни на кого не ругается, но скрипт почему-то не работает. Это видно из того что файл Main.upx не появился, да и файл остался прежним.

Добавлено спустя 1 минуту 52 секунды:
alex208210 писал(а):uses unix;
Код: Выделить всё
if fileexists('/media/Файлы/Lazarus/Проекты/main')=true then
begin
shell('bash -c "upx --best /media/Файлы/Lazarus/Проекты/main"');
showmessage('Бинарник упакован');
end;

Здесь появляется ошибка:
Код: Выделить всё
_main.pas(48,11) Error: Identifier not found "shell"


Добавлено спустя 2 минуты 35 секунд:
А вообще неплохо было бы где-то почитать на эту тему. Ведь этот скрипт я взял как пример. А может быть ведь последовательность команд, таких как это:
Код: Выделить всё
ffmpeg -i input.mpg \
-vcodec h263 -s qcif -r 15 -b 100k \
-acodec libfaac -ac 1 -ar 32000 -ab 64k \
output.3gp
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20

Re: Скрипты в LAZARUS

Сообщение alex208210 » 19.06.2011 15:49:50

Здесь появляется ошибка:
Код: Выделить всё
_main.pas(48,11) Error: Identifier not found "shell"


uses unix; не спроста там написан..
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: Скрипты в LAZARUS

Сообщение alexsa » 19.06.2011 15:54:29

alex208210 писал(а):uses unix; не спроста там написан..

Виноват. Не обратил внимание. Теперь ошибки не выдает, сообщение, что "Бинарник упакован" получаю ТУТ ЖЕ! Но скрипт не запускается... :(
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20

Re: Скрипты в LAZARUS

Сообщение alex208210 » 19.06.2011 15:58:07

Код: Выделить всё
function Tform1.shellv(commd:string):ansistring;
var
  S : TProcess;
  Buf: ansistring;
  Count : longint;
begin
  S:=TProcess.Create(Nil);
  S.Commandline:=commd;
  S.Options:=[poUsePipes,poNoConsole];
  S.execute;
  SetLength(buf, 1000);
  Repeat
    Count:=s.output.read(buf[1], length(buf));
    result:=result + Copy(buf, 1, Count-1);
  until Count=0;
  S.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.add(shellv('bash -c "upx --best /media/Файлы/Lazarus/Проекты/main"'));
end;


что в memo1 выводит?
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: Скрипты в LAZARUS

Сообщение alexsa » 19.06.2011 16:00:50

alex208210 писал(а):uses unix;
if fileexists('/media/Файлы/Lazarus/Проекты/main')=true then
begin
shell('bash -c "upx --best /media/Файлы/Lazarus/Проекты/main"');
showmessage('Бинарник упакован');
end;


Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
begin
     if fileexists('/media/Файлы/Lazarus/Проекты/Запуск консоли/Main1')=true then
     begin
     shell('bash -c "upx --best Main1 /media/Файлы/Lazarus/Проекты/Запуск консоли"');
     showmessage('Бинарник упакован');
     end;
end;


Вот так - работает. Спасибо большое :lol: То есть я целевой файл указал после команды, а потом каталог местонахождения файла.
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20

Re: Скрипты в LAZARUS

Сообщение alex208210 » 19.06.2011 16:10:20

если нужно запускать сформированный скрипт то можно сначало его сформировать а потом выполнить консолью:

Код: Выделить всё
shellv('bash -c "echo ''#!/bin/bash'' > /scr.sh"');
shellv('bash -c "echo ''ffmpeg -i input.mpg \'' >> /scr.sh"');
shellv('bash -c "echo ''-vcodec h263 -s qcif -r 15 -b 100k \'' >> /scr.sh"');
shellv('bash -c "echo ''-acodec libfaac -ac 1 -ar 32000 -ab 64k \'' >> /scr.sh"');
shellv('bash -c "echo ''output.3gp'' >> /scr.sh"');

shellv('bash -c "chmod +xxx /scr.sh"');
shellv('xterm /scr.sh');
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: Скрипты в LAZARUS

Сообщение alexsa » 19.06.2011 16:14:39

alexsa писал(а):
Код: Выделить всё
var
   AProcess: TProcess;
begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := 'upx --best /media/Файлы/Lazarus/Проекты/Main';
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   AProcess.Free;
end;

Стало работать, когда сделал так:
Код: Выделить всё
var
   AProcess: TProcess;
begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := 'bash -c "upx --best Main /media/Файлы/Lazarus/Проекты"';
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   AProcess.Free;
end;
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20

Re: Скрипты в LAZARUS

Сообщение Padre_Mortius » 19.06.2011 16:15:29

если у вас работает эта команда, то Убунта странная система
Код: Выделить всё
upx --best Main1 /media/Файлы/Lazarus/Проекты/Запуск консоли


на федоре результатом выполнения данной команды является ошибка
Код: Выделить всё
IOException: not a regular file -- skipped
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Скрипты в LAZARUS

Сообщение alexsa » 19.06.2011 16:29:59

Padre_Mortius писал(а):если у вас работает эта команда, то Убунта странная система
Код: Выделить всё
upx --best Main1 /media/Файлы/Lazarus/Проекты/Запуск консоли


на федоре результатом выполнения данной команды является ошибка
Код: Выделить всё
IOException: not a regular file -- skipped

Не знаю, насколько она странная. Но именно так и стало работать. Я почему решил попробовать так? Ведь в консоли, после того как перешел в каталог программы, выполнял команду именно так:
Код: Выделить всё
upx --best Main1
Спасобо большое Вам Padre_Mortius и Вам alex208210. Вы меня сегодня кое чему научили. Думал, что Shell мне уже никогда изучать не придется - очевидно ошибался. Нужно будет им заняться :D
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru