c++ - 与 QProcess 交互的问题

标签 c++ qt shell stdin qprocess

我正在使用 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/

相关文章:

linux - 如何使用 linux 帧缓冲区旋转 Qt5 应用程序?

c++ - Macdeployqt 不工作

c++ - Qt c++ QPixmap 检查是否已初始化

linux - 覆盖 ="-Dplan.override $2"

c++ - RFX_BigInt 错误

c++ - 使用 Luabind 实例化 lua 类

linux - 为什么 wc 命令比预期的多了一个字符?

linux - 用于比较远程目录的 Shell 脚本

c++ - 使用空参数包函数参数调用初始化列表中的函数

c++ - 字符串而不是 Cstring c++