прошу помощи по tprocess (перенаправление вывода) РЕШЕНО

Общие вопросы программирования, алгоритмы и т.п.

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

прошу помощи по tprocess (перенаправление вывода) РЕШЕНО

Сообщение Deimos » 05.01.2015 20:27:51

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var proc1:tprocess;
begin
   proc1:=tprocess.Create(selfl);
   proc1.Options:=proc1.Options+[powaitonexit, poUsePipes];
   proc1.CommandLine:=extractfilepath(paramstr(0))+'mysqldump.exe -uuser -ppassword dbname > dbname.sql';
   proc1.Execute;
   proc1.Free;
end;


не работает конструкция.

P.S. С двойными кавычками тоже не работает.
Последний раз редактировалось Deimos 06.01.2015 07:24:26, всего редактировалось 1 раз.
Deimos
постоялец
 
Сообщения: 169
Зарегистрирован: 17.01.2010 00:31:30

Re: прошу помощи по tprocess

Сообщение Little_Roo » 05.01.2015 22:19:50

Deimos писал(а):proc1:=tprocess.Create(selfl);

Ы ?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: прошу помощи по tprocess

Сообщение Ism » 05.01.2015 22:32:59

Надо так
http://www.freepascal.ru/forum/viewtopic.php?f=5&t=8151
Код: Выделить всё
Process1.Active:=false;
Process1.ShowWindow:=swoShow;
Process1.Executable:='cmd';
Process1.Parameters.Clear;
Process1.Parameters.Add('/k');
Process1.Parameters.Add('notepad.exe');
Process1.Execute;
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: прошу помощи по tprocess

Сообщение Deimos » 06.01.2015 06:02:49

Little_Roo писал(а):Ы ?

Ачепятка - эту ошибку я сам-бы нашел :)

Ism писал(а):Надо так

В обоих случаях (первоначальный/рекомендованный) результат абсолютно одинаков.

Консоль вывода:

-- MySQL dump 10.14 Distrib 5.5.36-MariaDB, for Win64 (x86)
--
-- Host: localhost Database: dbtest > dbtest.sql
-- ------------------------------------------------------
-- Server version 5.5.36-MariaDB

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
Deimos
постоялец
 
Сообщения: 169
Зарегистрирован: 17.01.2010 00:31:30

Re: прошу помощи по tprocess

Сообщение скалогрыз » 06.01.2015 06:56:13

мне кажется у тебя лишний "> dbname.sql"
дело в том, что символ перенаправления вывода ">" есть надстройка оболочки (будь то cmd или какой-нибудь никсовый shell).
используя TProcess перенаравление вывода в файл dbname.sql нужно реализовывать самостоятельно, и "> dbname.sql" из параметров убирать

вызов через "cmd" соовершенно не нужен

Добавлено спустя 7 минут 13 секунд:
ну и есть же запасной вариант. не заморачиватся с TProcess и просто передать --result-file=dbname.sql в mysqldump
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: прошу помощи по tprocess

Сообщение sign » 06.01.2015 07:04:50

Мой вариант. Рабочий
Код: Выделить всё
function TDM.SaveDataBase: Boolean;
var S, SDir: String;
    TDir: WideString;
    prc: String;
    ParamString: String;
    P: TProcess;
begin
  // Сохранить все данные в архиве
  Result := False;
  S := ParamStr(0);  // Путь к программе
  SDir := ExtractFilePath(S);
  TDir := Utf8ToAnsi(NewArchiveName(SDir + CDirArchiveData + '\'));
  if TDir = '' then Exit;
  if not ForceDirectories(TDir) then Exit;
  S := DM.con.DatabaseName;
  ParamString :=  Format(' -uroot -hlocalhost -B %s --result-file="%s%s.sql"', [S, TDir, S]) + #0;
  prc := 'C:\Program Files\MySQL\MySQL Workbench 5.2 CE\mysqldump.exe';
  P := TProcess.Create(nil);
  P.CommandLine := prc + ParamString;
  P.Options := P.Options + [poWaitOnExit, poNoConsole];
  P.Execute;
  Result := P.ExitStatus = 0;
  P.Free;
end;

sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: прошу помощи по tprocess (перенаправление вывода) РЕШЕНО

Сообщение Deimos » 06.01.2015 07:30:46

был сонный и НЕ внимательный = "самдурак"

скалогрыз писал(а):мне кажется у тебя лишний "> dbname.sql"
согласен. нашел сам, до прочтения Вашего поста.

Ism писал(а):Надо так


Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var proc1:tprocess;
begin
   proc1:=tprocess.Create(selfl);
   proc1.Options:=proc1.Options+[powaitonexit, poUsePipes];
   proc1.Executable:='cmd';
   proc1.Parameters.add=extractfilepath(paramstr(0))+'mysqldump.exe -uuser -ppassword dbname > dbname.sql';
   proc1.Execute;
   proc1.Free;
end;


скалогрыз писал(а):вызов через "cmd" соовершенно не нужен

sign писал(а):Мой вариант. Рабочий


Вариант более изящный/удобный - спасибо.

P.S.
скалогрыз писал(а): --result-file=dbname.sql
- не знал = не полностью вник в команды = (опять-же) "самдурак"
Deimos
постоялец
 
Сообщения: 169
Зарегистрирован: 17.01.2010 00:31:30


Вернуться в Общее

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

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

Рейтинг@Mail.ru
cron