process.write("cat /sys/class/gpio/gpio23/value"); process.waitForReadyRead(); QString result = process.readAll(); 为什么result里没有值
时间: 2024-02-20 20:02:34 浏览: 72
可能是因为读取的文件内容为空或者读取出错导致的。你可以通过打印出错误信息来查看具体原因:
```
process.write("cat /sys/class/gpio/gpio23/value");
process.waitForReadyRead();
QString result = process.readAll();
if (process.error() != QProcess::UnknownError) {
qDebug() << "Error occurred: " << process.errorString();
}
qDebug() << "Result: " << result;
```
另外,你也可以尝试使用`process.readLine()`来替代`process.readAll()`方法,这样可以逐行读取文件内容,更容易发现问题所在。
相关问题
process.start("su"); process.waitForStarted(); // 读取GPIO口值 process.write("cat/sys/class/gpio/gpio23/value"); process.waitForReadyRead(); QString result = process.readAll(); //output_message(); qDebug() << "GPIO 23 value: " << result; // 关闭su命令 process.close();为什么result里面没有值
在执行 `process.write("cat/sys/class/gpio/gpio23/value");` 时,你需要在 `cat` 和 `/sys` 之间添加一个空格,即 `cat /sys/class/gpio/gpio23/value`。否则,这个命令会被识别为 `catsys/class/gpio/gpio23/value`,这是一个错误的路径,导致无法读取 GPIO 值。因此,你需要修改这行代码为 `process.write("cat /sys/class/gpio/gpio23/value");`。
此外,你需要在读取完 GPIO 值后调用 `process.waitForReadyRead();` 以等待数据的读取。所以你可以将 `process.waitForReadyRead();` 代码行移动到 `process.readAll();` 的前面,就像这样:
```
process.start("su");
process.waitForStarted();
// 读取GPIO口值
process.write("cat /sys/class/gpio/gpio23/value");
process.waitForReadyRead(); // 等待数据的读取
QString result = process.readAll();
//output_message();
qDebug() << "GPIO 23 value: " << result;
// 关闭su命令
process.close();
```
这样应该就可以读取到 GPIO 值并将其存储在 `result` 变量中了。
process.start("cmd.exe",args); process.waitForStarted(); process.write("echo 98 > /sys/class/gpio/export;echo high > /sys/class/gpio/gpio98/direction;echo 99 > /sys/class/gpio/export;cat /sys/class/gpio/gpio99/value\n");代码中没有多次调用 process.write 方法的情况下process.write为什么会执行两遍,如何制止
根据你提供的代码,我猜测可能出现了缓冲区的问题。当调用 `process.write()` 方法时,写入的数据并不会立即发送到子进程,而是先暂存在缓冲区中,直到缓冲区满或者手动调用 `process.flush()` 方法才会将数据发送到子进程中。因此,在你的代码中,由于缓冲区满或者其他原因,第一个 `process.write()` 写入的数据没有被发送到子进程中,当程序执行到第二个 `process.write()` 时,之前的数据也被一起发送了,导致实际执行的命令是两个 `process.write()` 写入的命令的组合。
要解决这个问题,可以在每次调用 `process.write()` 方法后手动调用 `process.flush()` 方法将数据立即发送到子进程中,如下所示:
```
process.start("cmd.exe",args);
process.waitForStarted();
process.write("echo 98 > /sys/class/gpio/export;echo high > /sys/class/gpio/gpio98/direction;echo 99 > /sys/class/gpio/export;cat /sys/class/gpio/gpio99/value\n");
process.flush(); // 手动将数据发送到子进程中
```
这样就可以确保每次写入的数据都会立即发送到子进程中,避免多次命令的组合。
阅读全文