Russian Qt Forum

Qt => Общие вопросы => Тема начата: IGHOR от Апрель 11, 2010, 03:35



Название: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: IGHOR от Апрель 11, 2010, 03:35
Использую QProcess для запуска внешнего приложения Rar.exe и через readAllStandardOutput() получаю % текущей операции и вывожу его в QProgressBar.
В общем код запуска приложения:

Код:
QProcess proc;
proc.start(exeParam,paramList);
while(proc.waitForReadyRead(-1))
{
int outPrecent=getPrecentFromOutput(proc.readAllStandardOutput());
...
}

По запуске приложения rar.exe получаю переодически вывод и достаю % как и должжно быть.
Я решил попробовать то же проделать с 7-zip для сжатия файлов. Достал консольную версию 7za.exe
но в итоге waitForReadyRead() возвращает значения консоли только по завершении архивирования,
при обращении к proc.readAllStandardOutput() с помощью таймера по средине операции функция возвращает пустой результат.
Как прочитать вывод через QProcess чтобы всюду работало?
Чем же могут отличятся консольные выводы этих программ?
Может еще что-то надо задать в QProcess?


Название: Re: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: lit-uriy от Апрель 11, 2010, 05:27
>>Чем же могут отличятся консольные выводы этих программ?
ну а ты его запусти в консоли и глазами посмотри, что он выводит.


Название: Re: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: Пантер от Апрель 11, 2010, 10:42
У 7z проценты не через StandardOutput передаются, на сколько я знаю.


Название: Re: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: IGHOR от Апрель 11, 2010, 18:45
У 7z проценты не через StandardOutput передаются, на сколько я знаю.
Если так то как его прочитать через Qt?

lit-uriy, я не о текстовом формате вывода, а о том что нет сигнала при изменении текста (процентов) в 7z а в Rar.exe все как надо


Название: Re: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: IGHOR от Апрель 11, 2010, 19:19
Если в консоли выполнить: "Rar.exe a QtCore4.rar QtCore4.dll > rar.txt"
то содержание rar.txt будет где-то таким:
Код:
RAR 3.93   Copyright (c) 1993-2010 Alexander Roshal   15 Mar 2010
Shareware version         Type RAR -? for help

Evaluation copy. Please register.

Creating archive QtCore4.rar

Adding    QtCore4.dll                                                    ||||   1%||||   25%||||   50%||||   76%||||  100%||||  OK
Done

После выполнения: "7za.exe a QtCore4.7z QtCore4.dll > 7z.txt"
вывод в 7z.txt такой:
Код:
7-Zip (A) 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
Scanning

Creating archive QtCore4.7z

Compressing  QtCore4.dll

Everything is Ok

В 7z выводе нет никаких процентов но если смотреть в консоли то они выводятся, как средствами Qt читать такой вывод?


Название: Re: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: Пантер от Апрель 11, 2010, 21:47
Никак. Они, походу, рисуются на экране. Сам в свое время с этим столкнулся, решения не нашел. Это, скорее, минус 7zip'а.


Название: Re: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: IGHOR от Апрель 11, 2010, 22:55
Пантер, спасибо, видимо смирюсь с этим и время больше тратить не буду


Название: Re: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: Пантер от Апрель 11, 2010, 23:07
Можешь автору фичреквест отправить.


Название: Re: QProcess и waitForReadyRead для получения результатов из консольного приложения
Отправлено: IGHOR от Апрель 12, 2010, 00:06
Пантер, так и сделал: https://sourceforge.net/tracker/?func=detail&atid=364481&aid=2985588&group_id=14481


Название: Re: QProcess и waitForReadyRead для получения результатов из консо
Отправлено: kataklysm от Сентябрь 27, 2010, 08:25
Пантер, так и сделал: https://sourceforge.net/tracker/?func=detail&atid=364481&aid=2985588&group_id=14481

Тоже интересует статус процесса выполнения. Решилось ли как нибудь?Прочитал Tracker....
Хотя 7z at выдает, то что надо. Или хотя бы узнавать общее количество файлов. Как можно получить данные числа?