我正在使用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;提示,但我仍然想知道为什么提示没有发生
答案 0 :(得分:0)
您已撰写readLine()
,但该行尚未结束。只需查看光标在运行apt-get install
时的位置即可注意到:它不在下一行,而是在[Y / n]附近。
cat
命令可以显示行结尾:apt-get install brasero | cat -E
。
所以cat
设法读得很好。应该可以使用某种块读取模式(如read()
)来读取该文本。