python - 通过串行传输标准输出不起作用

标签 python c serial-port subprocess raspberry-pi

我正在尝试通过串行传输一个不断变化的 5 位数字值,为了伪造这个,我有一个名为 jsfake

的程序
int main() {
while (1) {
    printf("02000\n");
    fflush(stdout);
    sleep(1);
}
return 0;
}

然后我有了实际的 python 脚本,该脚本旨在通过串行方式从 C 程序传输标准输出。然后,我在底部添加了一个部分来接收序列号,并且我正在从一个树莓派到同一个树莓派进行测试,因此我可以在尝试从另一台计算机接收序列号之前确保它正在工作。

from serial import Serial
import subprocess

subp = subprocess.Popen("./jsfake",stdout=subprocess.PIPE)
port = Serial("/dev/ttyAMA0",115200,timeout=3)

while True:
    for line in iter(subp.stdout.readline, ''):
        port.write(line)
    if port.inWaiting!=0:
        rcv = port.read(6)
        print rcv

但是我的代码在 for line in iter(subp.stdout.readline, ''): 行等待,因为当我用 ctrl-c 中断它时,它总是在这个点。但是它不打印任何值。

编辑: 我尝试用 print lineprint line.rstrip() 替换最后 4 行,但也没有生成任何值。

最佳答案

试试这个:

import subprocess
from serial import Serial
port = Serial("/dev/ttyAMA0",115200,timeout=3)

subp = subprocess.Popen("./test",stdout=subprocess.PIPE)

for line in iter(subp.stdout.readline, ''):
    port.write(line,)
    print line,

我不确定这是如何工作的,但按照这里 What's ending comma in print function for?我认为它可以防止输出被行缓冲,这样你的程序在读取行时将不再阻塞。

关于python - 通过串行传输标准输出不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24349209/

相关文章:

python - 如何使用 pySerial 在 python 中配置 tty?

Python 2 与 3 正则表达式的区别

python - python中的多线程 - 阻止调用在后台运行

c - 8字节内存可以输入4字节吗?没有损失?

c - 什么是 C 中可以展示不同 linux 调度程序(noop、CFS、deadline)优缺点的好程序?

python-3.x - Python3 双向串行通信 : Reading In Data

python - 有没有办法在找到第一个排序的 k 元素之前在 python 中对列表进行排序?

python - 时间复杂度与空间复杂度

c - 可疑指针转换警告

C# 计算LRC(纵向冗余检查)