2015-07-20 71 views
0

當我在終端上運行這個腳本時,我可以串行接收數據,但最終我的整個計算機都凍結了。有人可以解釋爲什麼發生這種情況?爲什麼這個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) 
+1

dmesg裏或系統日誌的任何輸出? –

+1

也許是因爲無限循環? – Andersson

回答

1

有人可以解釋爲什麼會發生這種情況嗎?

while True:沒有break

0

它看起來像應用程序正試圖從一個物理端口來讀取和您的while循環不斷地讀書。此行爲將查找您的計算機,因爲沒有讀取數據的等待或回調。

0

你的問題是與port.read(1)行。根據PySerial's Documentation,您指定只需要從USART硬件緩衝區中讀取一個字節。但是,如果沒有要讀取的字節,PySerial默認會等待一些數據,導致程序「凍結」。

我的建議是超時ARG添加到端口初始化行(其中12表示12秒,它可以是任何你想要的)

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