我正在尝试通过串行传输一个不断变化的 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 line
和 print 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/