问题与QProcess交互

时间:2018-04-20 20:31:12

标签: c++ qt shell stdin qprocess

我正在使用QProcesses在c ++应用程序中运行shell命令。其中一个命令是apt-get install命令。我将readyread信号连接到从进程读取的方法,并将其附加到UI上的文本区域。

我的问题是,当apt-get install命令开始运行时,通常会询问的行#34;您要继续吗? [Y / N]"永远不会出现我的读取线函数读取的最后一行是前一行。 QProcess没有完成,暗示它正在等待输入。

为什么我的QProcess在没有打印提示的情况下等待输入?我该如何处理这个案子?我曾尝试使用QProcess::write来编写" Y"但它没有效果。

示例代码:

installPackage = new QProcess(this);
QString programStr = "sudo apt-get -f install";
installPackage->setProcessChannelMode(QProcess::MergedChannels);

connect(installPackage, &QProcess::readyRead,this, &MainWindow::readline);

connect(installPackage, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
    [=](){
    MessageBox->append("\n\nOperation Complete.");
});

installPackage->start(programStr);




void readline(){
    while(installPackage->canReadLine()){
        QString line = installPackage->readLine();
        MessageBox->append(line);
        if(line.contains("[Y/n]")) //never evaluates true
            installPackage->write("Y");
    }
}

编辑: 我使用了-y选项让apt-get自动回答“是”&#39;提示,但我仍然想知道为什么提示没有发生

1 个答案:

答案 0 :(得分:0)

您已撰写readLine(),但该行尚未结束。只需查看光标在运行apt-get install时的位置即可注意到:它不在下一行,而是在[Y / n]附近。

cat命令可以显示行结尾:apt-get install brasero | cat -E

所以cat设法读得很好。应该可以使用某种块读取模式(如read())来读取该文本。