Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача сложного аргумента в QProcess
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
RazrFalcon
xwininfo -name "`wmctrl -l | grep SMPlayer | cut -c26-`" | grep "Absolute upper-left Y" | cut -c27-
Это надо выполнить.
Вот фулл:
    QProcess myProcess;
    QString program = "xwininfo";
    QStringList arguments;
    arguments<<"-name"<<"`wmctrl -l | grep SMPlayer | cut -c26-`"<<"| grep 'Absolute upper-left Y' | cut -c27-";
    myProcess.start(program, arguments);
    myProcess.waitForFinished();
    myProcess.close();
    qDebug()<<myProcess.readAll();


У меня ""`wmctrl -l | grep SMPlayer | cut -c26-`"" должно быть как бы в двух кавычках.
Если arguments<<'"-name"'; то даже не компилит.
Алексей1153
экранировать кавычку ?

\"

? :)

arguments<<"\"-name\"";
RazrFalcon
arguments<<"-name"<<"\"`wmctrl -l | grep SMPlayer | cut -c26-`\""<<"| grep 'Absolute upper-left Y' | cut -c27-";

так? не пашит все равно...

ИЛИ
QProcess вообще может работать с конвейерами, или надо каждый аргумент отдельно запускать?
Я про wmctrl, grep, cut.

qDebug()<<arguments; выводит:
Цитата
("-name", ""`wmctrl -l | grep SMPlayer | cut -c26-`"", "|", "grep", ""Absolute upper-left Y"", "|", "cut", "-c27-")
Так что все вроде в норме.

Алексей1153
Цитата(RazrFalcon @ 7.2.2011, 21:09) *
так? не пашет все равно...


во-первых, у тебя зачем и кавычки (") и апострофы (') и ещё некие странные символы (`) . Ну а по существу не могу ничего подсказать, не сталкивался :(

Попробую сейчас в справку глянуть

аа, ты вон про что. У тебя же линукс. Нет, не смогу подсказать точно
BRE
Все пайпы организует шел, поэтому и запускать его придется.
Сделай скрипт и запускай уже его или руками запускай шел.
sh -c "cmd1 | cmd2 | cmd3"

RazrFalcon
Про шел уже нашел, спасибо.
А скрипт - это идея. Сейчас попробую.
Так как шел тоже не завелся =/

А само
qDebug()<<myProcess.readAll();
правильно, или его нужно раньше писать?
Может к тому моменту там уже пусто =/
BRE
Цитата(RazrFalcon @ 7.2.2011, 19:39) *
Может к тому моменту там уже пусто =/

Пусто там может быть только "еще", а "уже" быть не может (если никто другой оттуда ничего не вычитывет). :)
RazrFalcon
Цитата(read)
#!/bin/bash
xwininfo -id `wmctrl -l | grep SMPlayer | cut -c1-10` | grep 'Absolute upper-left Y' | cut -c27-


так работает
    QProcess myProcess;
    QString program = "/bin/sh";
    QStringList arguments;
    arguments<<"../ambilight/read";
    myProcess.start(program, arguments);
    myProcess.waitForFinished();
    qDebug()<<myProcess.readAll();
    myProcess.close();


qDebug()<<myProcess.readAll(); - только перед myProcess.close(); если после то выводит пустоту. Я об этом спрашивал выше.
BRE
Цитата(RazrFalcon @ 7.2.2011, 19:45) *
qDebug()<<myProcess.readAll(); - только перед myProcess.close(); если после то выводит пустоту. Я об этом спрашивал выше.

Я на close() и внимания не обратил. :)
Его явно можно и не вызывать, все закроется автоматически после разрушения объекта myProcess.
RazrFalcon
ААА... ясно. Спасибо. Пашет. :lol:
Еще бы понят почему оно без скрипта не хочет =\

...
arguments<<"-c"<<"xwininfo -id `wmctrl -l | grep SMPlayer | cut -c1-10`  | grep 'Absolute upper-left X' | cut -c27-";
Если все кавычки убрать - пашет!
Только теперь мне надо два процесса запускать, а со скриптом 1-н. Так даже лучше :lol: .

PS как можно прикрутить подсветку синтаксиса у bash в QT Creator?
BRE
Цитата(RazrFalcon @ 7.2.2011, 19:50) *
Только теперь мне надо два процесса запускать, а со скриптом 1-н. Так даже лучше :lol: .

Эээ. Какие два процесса или один процесс?
Если посмотреть на строку, то запускается куча разных процессов, которые соединяются пайпами.
А шел, и в первом и во втором случае, будет использоваться один. Или ты про что?
RazrFalcon
А ну да...

мой скрипт:
#!/bin/bash
xwininfo -id `wmctrl -l | grep SMPlayer | cut -c1-10`  | grep 'Absolute upper-left X' | cut -c27-
xwininfo -id `wmctrl -l | grep SMPlayer | cut -c1-10`  | grep 'Absolute upper-left Y' | cut -c27-

А так пришлось бы дважды вызывать QProcess.
Litkevich Yuriy
Цитата(RazrFalcon @ 7.2.2011, 21:50) *
PS как можно прикрутить подсветку синтаксиса у bash в QT Creator?
это отдельная тема.

вообще можно было извернутся и использовать несколько QProcess, каждый из которых запускает свою программу, ну а тебе надо будет связать их потоки В/В.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.