与 QProcess 交互的问题
Issue interacting with QProcess
我正在使用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()
.
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- Qt VTK交互风格的信号到小部件
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- C++继承和"常量"交互的问题
- 玩家移动和碰撞之间的交互问题
- 与 QProcess 交互的问题
- C++(DLL)与C#控制台应用程序的交互问题