【问题标题】:using QT process to get sensor information from the laptop using command line使用 QT 进程使用命令行从笔记本电脑获取传感器信息
【发布时间】:2013-07-06 17:10:53
【问题描述】:

我正在使用 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() 函数,它们给了我错误的输出也!!!

有什么帮助吗?

【问题讨论】:

    标签: c++ regex string qt substring


    【解决方案1】:
    process->start("sensors | grep \"Core\"");
    

    这里的问题是start函数将第一个参数作为程序执行,然后将后续参数作为参数传递给程序,所以| grep 和 "Core" 被传递给 sensors 命令,然后它会抱怨,因为它不知道如何处理这些参数。

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

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

    sensors | grep \"Core\"
    

    然后启动一个调用您的脚本的 QProcess。

    【讨论】:

    • 我获取了整个传感器输出并使用 indexOf() 命令对其进行解析.. 谢谢
    【解决方案2】:

    您应该尝试以下方法:

    process->start("/bin/sh", "-c \"sensors | grep Core\");
    

    问题是:

    |SHELL 的一部分,因此 shell 运行第一个程序,然后运行第二个程序。

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多