Как запустить консольный процесс - PullRequest
0 голосов
/ 28 мая 2011

Я работаю над запуском процесса из моего приложения Windows, этот процесс является консольным EXE-файлом.Я использую следующий код:

void compilerWindow::runClicked()
{
    proc = new QProcess(this);
    QString name = "C:\\qtEcoolCompiler\\qt\\vm.exe";

    QStringList args = QStringList() << "codeGeneration.vm";

    connect(proc, SIGNAL(readyRead()),
                  SLOT(readFromProc()));
    connect(proc, SIGNAL(error(QProcess::ProcessError)),
                  SLOT(procError(QProcess::ProcessError)));
    connect(proc, SIGNAL(finished(int)),
                  SLOT(procFinished()));

    outputBrowser->clear();
    outputBrowser->append("Begining Of Execution");

    proc->start(name, args);
    proc->waitForFinished();
}

Но проблема в том, что консоль не отображается (не открывается) и вызывается procFinished (), а консоль не открывается до тех пор.

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2013

Во-первых Консоль не открывается с помощью QProcess в Windows

Note: Windows intentionally suppresses output from GUI-only applications to
inherited consoles. This does not apply to output redirected to files or 
pipes. To forward the output of` GUI-only applications on the console 
nonetheless, you must use SeparateChannels and do the forwarding yourself 
by reading the output and writing it to the appropriate output channels.

Поэтому вы должны читать стандартный вывод процессов с помощью readAllStandardOutput () или readChannel () или одного из другихпредоставленные функции.Я понятия не имею, что делает vm.exe, но при условии, что путь указан правильно и procError (int) никогда не вызывается .... процесс выполняется и завершается правильно.

Если вы хотите использовать Readyread(), необходимо установить канал чтения .Но я бы предложил вместо этого использовать сигнал readyReadStandardOutput () .

0 голосов
/ 28 мая 2011

попробуйте функцию system (); он будет запускать команды, как если бы они запускались из windows cmd

...