为什么 for i in iter(os.popen('sudo minicom -D /dev/ttyUSB2 | grep "load average(s)"').readline,b' '): time.sleep(1) print(i) 打印的不是一整行
时间: 2023-12-14 13:35:51 浏览: 141
iov_iter.rar_单片机开发_Unix_Linux_
这是因为 `os.popen()` 返回的是一个文件对象,每次调用 `readline()` 方法只会读取一行,并且读取的行末尾可能会包含换行符或其他空白字符。在你的代码中,你使用了 `iter()` 函数和一个生成器表达式来迭代读取每一行,但是你指定了分隔符为 `' '`,这会导致只打印出行中的第一个单词,而不是整个行。
为了解决这个问题,你可以将分隔符更改为 `'\n'`,这样就可以打印出完整的行了。修改后的代码示例如下:
```python
for i in iter(os.popen('sudo minicom -D /dev/ttyUSB2 | grep "load average(s)"').readline, '\n'):
time.sleep(1)
print(i)
```
或者你可以使用 `subprocess` 模块来替代 `os` 模块,`subprocess` 模块提供更好的处理子进程的方式,如下所示:
```python
import subprocess
proc = subprocess.Popen(['sudo', 'minicom', '-D', '/dev/ttyUSB2'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
line = proc.stdout.readline().decode('utf-8')
if not line:
break
if 'load average(s)' in line:
print(line.strip())
time.sleep(1)
```
这个代码使用 `subprocess.Popen()` 启动子进程,然后通过 `stdout` 属性读取子进程的输出。每次读取一行后,判断是否包含 `"load average(s)"` 字符串,如果是,则打印出整行。注意,需要对读取的字节流进行解码,以便正确处理输出。
阅读全文