Russian Qt Forum

Qt => Общие вопросы => Тема начата: santaclaus от Декабрь 02, 2009, 11:23



Название: QProcess, запуск приложения с параметрами
Отправлено: santaclaus от Декабрь 02, 2009, 11:23
Доброго времени суток!
есть следующий код:
Код:
QProcess *proc = new QProcess(this);//обьявление процесса
QStringList arg;
arg << "-eo" << "pid,comm" << "|grep 25224"; //параметры для команды ps
proc->start("ps", arg);
proc->waitForFinished();
QString message = proc->readAll();
qDebug() << message;

Суть такая, если не задавать |grep ПИД_ИСКОМОГО_ПРОЦЕССА, то работает хорошо и все выводит, но как только дописываешь греп, то пусто. Посоветуйте как реализовать!

Всем привет!


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: spectre71 от Декабрь 02, 2009, 11:37
Доброго времени суток!
есть следующий код:
Код:
QProcess *proc = new QProcess(this);//обьявление процесса
QStringList arg;
arg << "-eo" << "pid,comm" << "|grep 25224"; //параметры для команды ps
proc->start("ps", arg);
proc->waitForFinished();
QString message = proc->readAll();
qDebug() << message;

Суть такая, если не задавать |grep ПИД_ИСКОМОГО_ПРОЦЕССА, то работает хорошо и все выводит, но как только дописываешь греп, то пусто. Посоветуйте как реализовать!

Всем привет!


"|grep 25224" - не параметр коммандной строки для "ps".
"|" - пайп организуемый shell.
Ты путаеешь понятия. Ты не вызываешь shell, ты сам создаешь один процесс
A это
"ps -eo pid,comm |grep 25224"
комманда для shell создать два процесса
"ps -eo pid,comm" и "grep 25224"
И передать данные из stdout перевого на stdin второго


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: santaclaus от Декабрь 02, 2009, 12:44
Спасибо, ошибку понял.


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: BigHom от Апрель 06, 2010, 09:02
Поясните - как надо написать? (как должно быть , чтоб правильно работало?)


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: crossly от Апрель 06, 2010, 09:19
простейший способ сунуть это в командный файл... либо читать ассистент на предмет void QProcess::setStandardOutputProcess ( QProcess * destination )


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: kuzulis от Апрель 06, 2010, 10:01
Цитировать
Поясните - как надо написать? (как должно быть , чтоб правильно работало?)
попробуй вызывать шелл и его параметрами(аргументами) указывать : "ps -eo pid,comm |grep 25224"


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: Alex Custov от Апрель 06, 2010, 17:09
Код
Bash
/bin/sh -c "ps -eo pid,comm |grep 25224"
 

Соответственно, в QProcess передаёшь /bin/sh как программу и "-c", "\"ps -eo pid,comm |grep 25224\"" как два аргумента.


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: BigHom от Апрель 29, 2010, 14:38
Ясно, а вот похожий случай: чтоб подсчитать КС cd-диска следует :
1) cмонтировать диск  :
       mount /mnt/cdrom
2)перейти в каталог /mnt/cdrom :
       cd /mnt/cdrom
3)выполнить :
       tar c `ls -A|sort` |md5sum

Как можно всё это выполнить из программы Qt ( интересуют 2-3 пункты ) , с учётом 2) перейти в каталог?


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: crossly от Апрель 29, 2010, 15:05
выше все описано....


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: BigHom от Апрель 30, 2010, 09:43
выше все описано....
Допустим всё записано в командный файл  file.com , как его запустить на выполнение?


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: crossly от Май 03, 2010, 09:24
как обычный бинарник...


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: Marat(Qt) от Май 03, 2010, 09:59
Как вариант:
Код:
/bin/sh -c "mount /mnt/cdrom&&cd /mnt/cdrom&&tar c `ls -A|sort` |md5sum"


Название: Re: QProcess, запуск приложения с параметрами
Отправлено: Alex Custov от Май 03, 2010, 13:31
Ясно, а вот похожий случай: чтоб подсчитать КС cd-диска следует :

MD5 считается с устройства, а не с содержимого. То есть с файлв /dev/cdrom или другого, соответствующего CD-ROMу.