Russian Qt Forum

Qt => Вопросы новичков => Тема начата: build1423 от Январь 31, 2013, 17:27



Название: Работа с Qprocess
Отправлено: build1423 от Январь 31, 2013, 17:27
Здравствуйте. Есть кусок кода:
    QProcess termimal;
    termimal.start("xterm");
    termimal.waitForStarted(2000);
    termimal.write("ls\n");
    termimal.waitForFinished();
    termimal.close();
Если кто не понял, я хочу с помощью Qprocess вызвать терминал и выполнить в нём команду. Окно терминала открывается, но самой команды ls и результата нету. Почему?


Название: Re: Работа с Qprocess
Отправлено: Old от Январь 31, 2013, 17:38
Ну как бы терминал обеспечивает ввод/вывод для процессов. Он сам никакие команды не выполняет, это делает shell.
Запускай один из них, например bash (/bin/bash).


Название: Re: Работа с Qprocess
Отправлено: build1423 от Январь 31, 2013, 18:00
Запускай один из них, например bash (/bin/bash).
М, хорошо. Сменил
termimal.start("xterm");
на
termimal.start("sh", QStringList() << "-c");
Ничего не изменилось. Только ж теперь ясное дело не выскакивает окно xterm.


Название: Re: Работа с Qprocess
Отправлено: Alex Custov от Январь 31, 2013, 18:23
man xterm. Опция -e.


Название: Re: Работа с Qprocess
Отправлено: Old от Январь 31, 2013, 18:25
Только ж теперь ясное дело не выскакивает окно xterm.
Тебе ехать или шашечки? :)
Код
C++ (Qt)
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
 
int main( int argc, char *argv[] )
{
       QCoreApplication app( argc, argv );
 
       QProcess process;
       process.start( "/bin/bash" );
       process.waitForStarted();
 
       process.write( "ls\n" );
       process.waitForReadyRead();
       qDebug() << process.readAll();
 
       process.write( "ls /\n" );
       process.waitForReadyRead();
       qDebug() << process.readAll();
 
       process.write( "exit\n" );
       process.waitForFinished();
 
       return 0;
}
 


Название: Re: Работа с Qprocess
Отправлено: build1423 от Январь 31, 2013, 23:34
Спасибо, Old. Получилось... Только неясно, зачем было QDebug подключать.