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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess и несколько подряд команд в Linux [РЕШЕНО]  (Прочитано 4399 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Февраль 15, 2010, 12:26 »

Доброго всем времени.

Долго думал как назвать тему.. и назвал так Улыбающийся

Суть проблемы вот в чем:
нужно в *.nix перехватывать вывод связки команд через QProcess (скорее всего) что-то вида:
Код:
# dmesg | grep "блабла"

Можно ли такое сделать с помощью QProcess? И если да - то как?
« Последнее редактирование: Февраль 15, 2010, 13:24 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Февраль 15, 2010, 12:59 »

Попробовал по аналогии сделать подобное на винде.
Т.е. в винде в консоли набираю так:
Цитировать
D:\projects\TEST\qprocess>ipconfig | findstr IP
.рёЄЁющър яЁюЄюъюыр IP фы  Windows
        IP-рфЁхё  . . . . . . . . . . . . : 192.168.1.64

т.е. выводит правильно адрес = 192.168.1.64

Но, если пишу на Qt4 приложение:
Код:
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    
    QProcess myProcess;
    QString sCmd("cmd"); // или в *.nix заменяем на "/bin/sh"
    QStringList slArgs;
    slArgs << "ipconfig | findstr IP";
    myProcess.start(sCmd, slArgs);
    qDebug() << myProcess.readAllStandardOutput();
    
    return app.exec();
}

и запускаю его, то выводит:
Цитировать
""

подскажите, что не так?

-------

и даже так не работает:
Код:
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
   
    QProcess myProcess;
    QString sCmd("ipconfig");
    myProcess.start(sCmd);
    if (!myProcess.waitForStarted())
        qDebug() << "Starting fail";
         
    qDebug() << myProcess.readAll();
   
    return app.exec();
}
« Последнее редактирование: Февраль 15, 2010, 13:15 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
BRE
Гость
« Ответ #2 : Февраль 15, 2010, 13:18 »

Все пайпы обрабатывает командный интерпретатор.
Сделай пакетный файл с этими командами и запускай его.
К тому же, нужно ждать готовности данных для чтения или использовать сигналы.

main.cpp
Код
C++ (Qt)
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
 
int main(int argc, char *argv[])
{
   QCoreApplication app(argc, argv);
 
   QProcess myProcess;
   QString sCmd( "/bin/sh" );
 
   QStringList slArgs;
   slArgs << "./ip.sh";
   myProcess.start(sCmd, slArgs);
   myProcess.waitForFinished();
   qDebug() << myProcess.readAllStandardOutput();
 
   return 0;
}
 

ip.sh
Код:
#!/bin/sh

ifconfig | grep inet
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Февраль 15, 2010, 13:23 »

ок.. спс.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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