Destroyed while process ("cmd")
Есть программа, которая запускает несколько команд через командную строку:
void MainWindow::on_installButton_clicked()
{
ui->plainTextEdit->clear();
QString program = "cmd";
QStringList arguments;
arguments << "/K" << "chcp 1251 & cd /d C:/Users/Пользователь/AppData/Local/Programs/Python/Python37-32/Scripts & pip install adssad";
QProcess *Process = new QProcess(this);
Process->start(program, arguments);
connect(Process, &QProcess::readyReadStandardOutput, [=] {
ui->plainTextEdit->appendPlainText(QString::fromLocal8Bit(Process->readAll()));
});
connect(Process, &QProcess::readyReadStandardError, [=] {
ui->plainTextEdit->appendPlainText(QString::fromLocal8Bit(Process->readAllStandardError()));
});
}
При закрытии программы (даже если выполнение команд уже завершено) получаю сообщение в Debug: Destroyed while process ("cmd") is still running. Попробовал добавить: Process.waitForFinished(); - из за этого программа зависает до закрытия процесса. Решил вывести всё это в отдельный поток - не работает ui внутри созданной мною функции. Как мне правильно завершить cmd без зависания программы? Или просто не обращать внимания?
Ответы (1 шт):
Все правильно дебаг говорит. хоть команды и выполнились, сам интерпретатор (cmd) вполне себе работает. Добавьте на исполнение в cmd "exit"
arguments << "/K" << "chcp 1251 & cd /d C:/Users/Пользователь/AppData/Local/Programs/Python/Python37-32/Scripts & pip install adssad & exit";
Или запускайте интерпретатор с ключиком /C (с завершением после исполнения)
arguments << "/C" << "chcp 1251 & cd /d C:/Users/Пользователь/AppData/Local/Programs/Python/Python37-32/Scripts & pip install adssad";
И конечно же есть смысл добавить ожидание завершения (waitForFinished).