为什么这个python脚本会崩溃我的电脑

时间:2015-07-20 16:01:30

标签: python

当我在终端中运行此脚本时,我可以连续接收数据,但最终我的整个计算机都冻结了。有人可以解释为什么会这样吗?

#!/usr/bin/env python

from sys import argv
from msppg import Parser
import serial

if len(argv) < 2:

    print('Usage: python %s PORT' % argv[0])
    print('Example: python %s /dev/ttyUSB0' % argv[0])
    exit(1)

def handler(pitch, roll, yaw):
    print(pitch, roll, yaw)
    port.write(request)

pitch, roll, yaw = 5, 15, 20
port = serial.Serial(argv[1])
parser = Parser()
request = parser.serialize_ATTITUDE_Request()
parser.set_ATTITUDE_Handler(handler)

def cycle(value):
    return (value + 1) %360

while True:

   print port.read(1)
   if port.read(1) != None:
       port.write(parser.serialize_ATTITUDE(pitch, roll, yaw))
   pitch = cycle(pitch)
   roll  =  cycle(roll)
   yaw   =  cycle(yaw)

3 个答案:

答案 0 :(得分:1)

  

有人可以解释为什么会这样吗?

while True:没有break

答案 1 :(得分:0)

看起来该应用正在尝试从物理端口读取并且您的while循环不断阅读。此行为将查找您的计算机,因为没有等待或回调来读取数据。

答案 2 :(得分:0)

您的问题在于port.read(1)行。根据{{​​3}},您指定只需要从USART硬件缓冲区读取一个字节。但是,如果没有要读取的字节,PySerial默认会等待一些数据,导致程序“冻结”。

我的建议是在端口init行添加一个超时arg(其中12表示12秒,它可以是你想要的任何东西)

port = serial.Serial(argv[1], timeout=12)