gpt4 book ai didi

c++ - qt 通过 qprocess 运行 shell 命令

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:59 32 4
gpt4 key购买 nike

我正在开发一个小型 QT 应用程序来与终端交互,向终端发送命令并读回打印出来的信息。

示例:使用 ps -aux 获取所有进程的输出

问题

我能够将信息写出到终端,但我认为它不在系统范围内,实际示例:

传递给 shell 解释器的命令:"echo "pre"; ps -aux; echo "post"

根据评论编辑:

我需要发送特定的完整命令,我不是在寻找缩短的或替代的命令,我需要一种发送命令的方法,如下所示:ps -aux | grep Chrome | tr -s ""| cut -d ""-f 2 并读取其输出。此示例获取所有正在运行的 chrome 进程的所有 pid

口译员尝试 :

  • sh
  • /bin/bash

代码:

QProcess *proc_ovpn = new QProcess(this);
proc_ovpn->waitForFinished();
proc_ovpn->start("sh",QStringList() << "-c" << "echo \"pre\";ps -aux; echo \"post\"");
proc_ovpn->setProcessChannelMode(QProcess::MergedChannels);
QString str(proc_ovpn->readAllStandardOutput());
return str; <<< ======= //breakpoint here

调试信息:

当到达断点时,调试信息如下:

Locals      
str "" QString
this @0x555555ad7be0 Interface
Inspector
Expressions
Return Value
Tooltip
10000000 10000000 int

SO上的帖子建议使用上面的方法运行shell代码,找不到了。

我很茫然,我不明白为什么运行这些命令不直接与系统(及其信息)交互,

有什么建议吗?

最佳答案

你需要在 start 之后使用 waitForFinished(),而不是在

之前
proc_ovpn->start("sh",QStringList() << "-c" << "echo \"pre\";ps -aux; echo \"post\"");
proc_ovpn->waitForFinished();

请注意,waitForFinished() 会阻塞,直到进程(已被 start 调用)完成...

此外,您还可以检查进程是否成功启动和/或 waitForFinished 是否超时

proc_ovpn->start("sh",QStringList() << "-c" << "echo \"pre\";ps -aux; echo \"post\"");

if(!proc_ovpn->waitForStarted()) //default wait time 30 sec
qWarning() << " cannot start process ";

int waitTime = 60000 ; //60 sec
if (!proc_ovpn->waitForFinished(waitTime))
qWarning() << "timeout .. ";

关于c++ - qt 通过 qprocess 运行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40407394/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com