Russian Qt Forum
Ноябрь 25, 2024, 00:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QT и Архивы  (Прочитано 9064 раз)
ysfox
Гость
« Ответ #15 : Сентябрь 06, 2010, 12:25 »

о пасиб... значит всетаки ждет окончяния процеса а потом приступает к другому - если я правильно понял....

сделал пока што так:
Код:
                  QProcess *proc = new QProcess();
                  QString Error_string, Standart_output_string,aaalll_string;
                  File_Name = "cp -R /media/sda1/" + (Update_strukt[sss].name) + "_2.zip /home/root";
                  proc->execute(File_Name);
                  Error_string = proc->readAllStandardError();
                  Standart_output_string = proc->readAllStandardOutput();
                  aaalll_string = Error_string + "\n\n" + Standart_output_string;
                  proc->close();

                  File_Name = "unzip " + (Update_strukt[sss].name) + "_2.zip";
                  proc->execute(File_Name);
                  Error_string = proc->readAllStandardError();
                  Standart_output_string = proc->readAllStandardOutput();
                  aaalll_string += "\n\n" + Error_string + "\n\n" + Standart_output_string;
                  proc->close();

                  File_Name = (Update_strukt[sss].name) + ".bat";
                  proc->execute(File_Name);
                  Error_string = proc->readAllStandardError();
                  Standart_output_string = proc->readAllStandardOutput();
                  aaalll_string +=  "\n\n" + Error_string + "\n\n" + Standart_output_string;
                  proc->close();

                  proc->kill();
                  delete proc;
                  write_file("REZ.txt",aaalll_string);
но програмка зависает то на запуске бат файла то на разпаковке архива. где у меня ошыбка в коде?.... с процесами я пока ещо на ВЫ такшто нужна помощь Улыбающийся
Записан
TheMixa
Гость
« Ответ #16 : Сентябрь 06, 2010, 14:07 »

что зачит зависает? Думайте, смотрите внимательно стандартный вывод по ходу выполнения. Тут уже никто не поможет кроме как сам себе.
Записан
ysfox
Гость
« Ответ #17 : Сентябрь 06, 2010, 14:36 »

ух разобрался... немного не так бат файл считывал Улыбающийся
теперь все работает... но пока почемуто не выдает ничево в:
readAllStandardOutput();
readAllStandardError();

или там когда все пройшло успешно ничево не должно быть?

« Последнее редактирование: Сентябрь 06, 2010, 15:14 от ysfox » Записан
SASA
Гость
« Ответ #18 : Сентябрь 06, 2010, 17:33 »

Все ето без проблем можно контролировать QProcess ом
Это я и хотел сказать.
Записан
ysfox
Гость
« Ответ #19 : Сентябрь 07, 2010, 09:36 »

Все ето без проблем можно контролировать QProcess ом
Это я и хотел сказать.

 Улыбающийся

но вот никак не пойму почему при считывание ошыбок и всево другого после завершения процеса - там пусто Грустный
сделал так:

Код:
                  QProcess *proc = new QProcess();
                  QByteArray Error_string, Standart_output_string, all;
                  QString aaalll_string;
                  File_Name = "/media/sda1/" + (Update_strukt[sss].name) + "_2.zip";
                  proc->execute("cp",QStringList() << "-R" << File_Name << "/home/root");
                  Error_string = proc->readAllStandardError();
                  Standart_output_string = proc->readAllStandardOutput();
                  all = proc->readAll();
                  aaalll_string = "\nPRINT:\n"+all+"\n\n"+Error_string+"\n\n"+Standart_output_string+"\nEND_PRINT\n";
                  qDebug(aaalll_string.toStdString().c_str());
                  proc->close();



но в
Код:
                  Error_string = proc->readAllStandardError();
                  Standart_output_string = proc->readAllStandardOutput();
                  all = proc->readAll();
пусто(.такое впечатление что процес ничево не возвращяет... мож я чтото не так делаюНепонимающий
Записан
merke
Гость
« Ответ #20 : Сентябрь 07, 2010, 11:03 »

как все страшно у тебя в коде. Попробуй тот вариант который я тебе предложил.
Записан
ysfox
Гость
« Ответ #21 : Сентябрь 07, 2010, 12:31 »

как все страшно у тебя в коде. Попробуй тот вариант который я тебе предложил.

почемуже страшно Смеющийся
ето все так для отладки просто сделано)))
а сам код можно вообще уменьшыть до:


Код:
                  QProcess *proc = new QProcess();
                  proc->execute("cp -R  /media/sda1/proba_2.zip /home/root");
                  aaalll_string =proc->readAll() + proc->readAllStandardError() +proc->readAllStandardOutput();
                  proc->close();

или вот так ( ето сделает тоже что и Ваш вариант, только короче  Подмигивающий , хотя Ваша идея считывать и проверять файлы в цыклке хорошая Улыбающийся, я раньше чтото не подумал о таком варианте ):


Код:
                  QProcess *proc = new QProcess();
                  proc->execute("cp -R  /media/sda1/proba_2.zip /home/root");
                  if((QFile::exists("proba_2.zip"))) //чтото там сделать, или вывести код ошыбки если что...
                  proc->close();

только хочется 1м вариантом чтоб считать весь лог и ошыбку и все что выводит при етом консоль... но почемуто не считывает Улыбающийся (не считываетproc->readAll() proc->readAllStandardError() proc->readAllStandardOutput() - там пусто)

« Последнее редактирование: Сентябрь 07, 2010, 12:42 от ysfox » Записан
ysfox
Гость
« Ответ #22 : Сентябрь 14, 2010, 10:24 »

так может кому пригодится, всеравно к теме подходит  Подмигивающий
добил работу с процесами - теперь все нормально - вот код:

Код:
QProcess proc;

proc.setProcessChannelMode(QProcess::MergedChannels);
proc.start("cp -R /media/sda1/ red_2.tar /home/root/Updates"); //считываем с флешки архив и записываем ево в /home/root/Updates
    if (!proc.waitForFinished()) //ждем окончяния процеса или таймаута (если ничево не указано то таймаут через 30 секунд)
         qDebug() << "1Make failed:" << proc.errorString(); //если неудачя считываем код ошыбки и выводим в консоль
    else
         qDebug() << "1Make output:" << proc.readAll(); //считываем результат и выводим в консоль
 proc.close();
proc.kill(); //так на всякий случяй - чтоб уже наверняка убить)

сдесь вместо того чтоб выводить в терминал можно просто анализовать ети строки на ключевые слова, например командой
Код:
if((Rez_String.contains("done"))&&(!(Rez_String.contains("error"))))
или чемто похожым и выводить сообщение об ошыбке, или ещо чтото делать Улыбающийся
« Последнее редактирование: Сентябрь 14, 2010, 10:26 от ysfox » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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