我正在使用 QProcesses 在 C++ 应用程序中运行 shell 命令。其中一个命令是 apt-get install
命令。我将 readyread
信号连接到一个方法,该方法从进程中读取并将其附加到 UI 上的文本区域。
我的问题是,当 apt-get install
命令开始运行时,通常询问“Do you want to continue? [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 自动对提示回答"is",但我仍然想知道为什么提示没有出现
最佳答案
您已经编写了readLine()
,但是该行还没有结束。运行 apt-get install
时只要看一下光标所在的位置就可以注意到:它不在下一行,而是在 [Y/n] 附近。
cat
命令可以显示行尾:apt-get install brasero | cat -E
.
所以 cat
成功地读取了它。应该可以使用某种 block 读取模式(如 read()
)来读取该文本。
关于c++ - 与 QProcess 交互的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49949309/