c++ - 使用QT进程使用命令行从笔记本电脑获取传感器信息

标签 c++ regex string qt substring

我正在使用 QT 进程从我在笔记本电脑中安装和配置的 lm-sensors 库中获取信息。我想从命令行读取信息并将其显示在我的 QT GUI 上,这就是我的工作正在做:

首先当我在控制台中使用这个命令时,我得到这个输出..

$ sensors | grep "Core "
Core 0:         +51.0°C  (high = +86.0°C, crit = +100.0°C)
Core 1:         +49.0°C  (high = +86.0°C, crit = +100.0°C)

我想在我的代码中解析它..所以我这样做

process->start("sensors | grep \"Core\"");
process->waitForReadyRead();
QByteArray strdata = process->readLine();
qDebug() << strdata;

我在输出中得到了这个

"Try `sensors -h' for more information

当我将命令行更改为

process->start("watch \"sensors | grep \"Core \"\"")

我得到了如上的输出..我尝试了不同的函数来只获得 Core 0: +51 而没有额外的东西..

我尝试使用 indexOf() 函数获取索引,然后使用类似 mid() 的函数解析它。结果不正确。然后我尝试使用 right() 和 left() 函数,但它们给了我错误的输出也!!!

有什么帮助吗?

最佳答案

process->start("sensors | grep \"Core\"");

这里的问题是start函数将第一个参数作为要执行的程序,然后将后续参数作为参数传递给程序,所以| grep 和“Core”被传递给传感器命令,然后提示因为它不知道如何处理这些参数。

解决此问题的一种方法是调用传感器并使用 readAllStandardOutput() 获取返回的信息。然后您可以使用 Qt 字符串函数来搜索您想要的信息,或者如果您使用 setStandardOutputFile 设置了标准输出文件,那么您可以在该文件上使用 grep 调用 QProcess。 (注意 QTemporaryFile 在这里可能有用)。

但是,最简单的方法是创建一个小的命令行脚本来调用您的命令

sensors | grep \"Core\"

然后启动调用脚本的 QProcess。

关于c++ - 使用QT进程使用命令行从笔记本电脑获取传感器信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17542401/

相关文章:

c++ - sqlite3 c++ 中的主键错误

javascript - 正则表达式匹配字符串中没有开始和结束空格的单词

python - python 删除字符串中的字符组合

ruby - 为什么 Ruby String#split 不将连续的尾随分隔符视为单独的实体?

c++ - OpenCV Flann - 断言失败

c++ - 在 KMDF 驱动程序中包含 fstream.h 后出现链接器错误

MySQL - 替换查询中列中的空格

regex - 如何使用正则表达式删除 2 行模式之间的行?

c# - 如何替换整个文本中两个字符之间的字符串?

c++ - 在 Rcpp (Armadillo) 函数中使用数字序列作为默认参数