与 QProcess 交互的问题

Issue interacting with QProcess

本文关键字:问题 交互 QProcess      更新时间:2023-10-16

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

我的问题是,当apt-get install命令开始运行时,通常会询问"您要继续吗?[是/否]"从不出现。我的读取行函数读取的最后一行是前一行。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("nnOperation 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 自动对提示回答"是",但我仍然想知道为什么提示没有发生

你已经写了readLine(),但行还没有结束。只需查看运行apt-get install时光标的位置即可注意到:它不在下一行,而是靠近 [Y/n]。

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

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