情况:笔者在制作有关测试工具并且在代码中使用到了QProcess,发现诸如su root命令切换时,会出现弹出输入密码的等待用户输入的进程,从而造成QProcess阻塞等待或者使用QProcess的write方法将密码输入进去时会出现write方法先执行而su root后执行的情况,或者说write方法不起作用;

思路:笔者想着会不会是需要多个进程,比如再实例化一个QProcess对象然后设置父对象等等,又因为QProcess类的部分成员不知道具体有何用,多次尝试还是无果,最终在一个设置等待时间的方法中解决了;

解决办法:在代码中使用QProcess执行诸如su root后提示需要用户输入时,先调用QProcess的方法waitForFinished(1000);后再调用write()方法将需要用户交互输入的字符串输入进去,保险起见再调用一次waitForFinished(1000);1000的秒数可以自定义,目前认为只要给秒数就能实现这个交互过程。

有关QProcess具体的使用方法,笔者目前已实现代码中调用cmd,或者执行adb shell,模拟可视化cmd进行adb shell的有关操作;如果有问题的欢迎私聊一起讨论;

刚接触 Qt 两月有余,在实习的地方写写小工具,期间遇到不少问题,要么在网上搜索看CSDN大牛的有关 Qt 的博客,要么自己看书,虽然浪费了不少时间,还好有点长进,解决了问题。废话不多说,开始正题。 我的小工具 需要 调用在后台调用cmd程序,用 Qt 实现类似下面的功能,  cmd 写入一个exe可执行文件,后面是可执行文件 需要 的参数,然后回车就能运行出结果。起初网上搜到的都是用的 my... QProcess 类用于启动外部程序并与它们通信。 QProcess 允许将进程视为I/O设备。可以像使用 qt csocket访问网络连接一样对进程进行写入和读取。然后可以通过调用 write ()写入进程的标准 输入 ,并通过调用read()、readLine()和getChar()读取标准输出。因为 QProcess 继承了QIODevice,所以它还可以用作QXmlReader的 输入 源,或者用于生成要使用QNetworkAccessManager上载的数据。 当进程退出时,QProces
QProcess 实现进程通信的方式有点类似于管道。 QProcess 父进程通过 write 来写入标准 输入 stdin,通过ReadyRead信号来接收子进程的消息。 QProcess 子进程通过QFile来读取标准 输入 来接收父进程信息。通过QFile绑定QSocketNotifier来接收标准 输入 的实时信号,因为QSocketNotifier的activated信号可以通过标准 输入 是否有消息实时触发。 QProcess 子进程通过QFile绑定标准输出stdout来发送消息给父进程。 注意:子进程读取信息不能通过Q
process.waitForStarted(); process.waitForFinished(); text->append(QString::fromLocal8Bit(process.readAllStandardOutput())); 三、完整代码 #ifndef MAINWINDOW_H #define MAINW
进程的概念 进程是操作系统里的一个概念,所谓进程就是程序执行的时候,会产生程序调度,数据处理等过程,因此一个程序会有多个进程,每个进程有自己独立的数据空间,以允许同时有多位 用户 执行同一程序,却不会相冲突。 所以引申出一些其他的概念。 进程在执行时,状态(state)会改变。所谓状态,就是指进程目前的动作: 新生(new):进程新产生 。 执行(running):正在执行。 等待(waiting):等待某事发生,例如等待 用户 输入 完成。亦称“阻塞”(blocked) 就绪(ready):排班 ,等待CP
qt 环境程序 通过 QProcess 启动进程的方式启动windows系统自带的画图程序 遇到的错误: 通过 命令 启动画图程序,传给画图程序的路径参数要用双引号包含在里面,否则会出现路径被空格字符 断 例如:mspaint.exe g:\ggg ggg\image.png 其实这个 命令 在画图程序执行的时候获得的图片路径值是g:\ggg.png,即路径在空格处 QProcess 文档说明: QProcess p; p.start("sh", QStringList() << "-c" << "ps -eo pid,lstart | grep 1808"); p.waitForFinished(); 这样也是可以的: QString cmd = "ps -ef | awk '{pri
Qt QProcess 是一个用于启动和控制外部进程的类。它允许您启动外部应用程序,并提供了一种与该应用程序进行 交互 的方法,包括向其发送 输入 、从其读取输出、等待其完成等。 使用 QProcess ,您可以在 Qt 应用程序 启动任何外部程序,包括 命令 行工具、GUI 应用程序,甚至包括其他 Qt 应用程序。您还可以使用 QProcess 执行系统 命令 ,并将其输出显示在应用程序 。 以下是一个使用 QProcess 启动外部应用并读取其输出的简单示例: ```cpp QProcess process; process.start("ls", QStringList() << "-l"); process.waitForFinished(); QString output = process.readAllStandardOutput(); 在此示例 ,我们使用 QProcess 启动 ls 命令 ,并将其输出作为 QString 对象返回。 QProcess 还提供了许多其他功能,例如异步执行、设置环境变量、设置工作目录等。您可以查看 Qt 文档以获取更多信息。