Всем привет!
(UBUNTU 11.04)
Вот такой вопрос у меня есть - Можно ли программно запустить на выполнение скрипт, типа того что мы пишем в консоли, и чтобы  программа узнала, когда скрипт закончил свою работу?
			
		Модератор: Модераторы

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

Padre_Mortius писал(а):изучайте вопрос по TProcess
cd /media/Файлы/Lazarus/Проекты/
upx --best MainAProcess.CommandLine := QuotedStr('upx --best Main /media/Файлы/Lazarus/Проекты/');
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 писал(а):
- Код: Выделить всё
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;
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"ffmpeg -i input.mpg \
-vcodec h263 -s qcif -r 15 -b 100k \
-acodec libfaac -ac 1 -ar 32000 -ab 64k \
output.3gp
Здесь появляется ошибка:
Код: Выделить всё
_main.pas(48,11) Error: Identifier not found "shell"
alex208210 писал(а):uses unix; не спроста там написан..


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;
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; То есть я целевой файл указал после команды, а потом каталог местонахождения файла.
 То есть я целевой файл указал после команды, а потом каталог местонахождения файла.
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');
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;
upx --best Main1 /media/Файлы/Lazarus/Проекты/Запуск консолиIOException: not a regular file -- skippedPadre_Mortius писал(а):если у вас работает эта команда, то Убунта странная система
- Код: Выделить всё
upx --best Main1 /media/Файлы/Lazarus/Проекты/Запуск консоли
на федоре результатом выполнения данной команды является ошибка
- Код: Выделить всё
IOException: not a regular file -- skipped
upx --best Main1

Сейчас этот форум просматривают: mike и гости: 1