m0_67526728 2023-01-20 11:24 采纳率: 50%
浏览 83
已结题

Linux无法正确执行Python代码

需求:电脑使用串口连接了一个温湿度计,使用Python向串口发送16进制指令,并提取返回数据。
问题:同样的Python程序在Windows下正常执行,但是想在Linux实现同样的功能,程序的串口号修改为Linux串口号过后程序执行,但是无法完全执行, len_return_data = ser.inWaiting() # 获取缓冲数据(接收数据)这里获取不到数据所以返回0,(在Windows下可以正常返回数据的)。程序执行并不报错。Windows和Linux编码都是UTF-8。唯一的区别是执行locale后windows是C.UTF-8。Linux是zh_CN.UTF-8.不知道是不是这个的问题。程序能执行一部分证明非权限问题

img

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import binascii
import time

import serial.tools.list_ports

if __name__ == '__main__':
# 读取串口列表
ports_list = list(serial.tools.list_ports.comports())
if len(ports_list) <= 0:
print("无串口设备")
else:
print("可用的串口设备如下: ")
print("%-10s %-30s %-10s" % ("num", "name", "number"))
for i in range(len(ports_list)):
comport = list(ports_list[i])
comport_number, comport_name = comport[0], comport[1]
print("%-10s %-30s %-10s" % (i, comport_name, comport_number))

# 打开串口
ser = serial.Serial(port="/dev/ttyS0", baudrate=9600, bytesize=8, stopbits=1,
timeout=0.5)
if ser.isOpen():
print("打开串口成功, 串口号: %s" % ser.name)
else:
print("打开串口失败")
# 串口发送数据
a = '01 03 01 03 05 02 c7 4B'
d = bytes.fromhex(a)

result = ser.write(d)
print(result)#8

time.sleep(1)
len_return_data = ser.inWaiting() # 获取缓冲数据(接收数据)
print(len_return_data)#0

if len_return_data > 0:
data = ser.read(len_return_data)
if data != b'':
print("receive", str(binascii.b2a_hex(data))[2:-1])

# 关闭串口
ser.close() 
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/691230581476189.png "#left")


  • 写回答

5条回答 默认 最新

  • bluetata 云计算领域优质创作者 2023-01-29 16:54
    关注

    先检查 linux机器里的串口是否正常,写一个测试程序,直接在linux里运行看看有没有输出,比如下面这个测试

    # 发送数据
    # encoding=utf-8
    import serial
    
    if __name__ == '__main__':
        com = serial.Serial('COM3', 115200)
        success_bytes = com.write('This is data for test')
        print success_bytes
    
    # 接收数据
    # encoding=utf-8
    import serial
    
    if __name__ == '__main__':
        com = serial.Serial('COM3', 115200)
        data = com.read(10)
        print data
    

    如果根据上述Linux串口没有问题,那么对比一下你linux和windows python的版本,包括pip包的版本,统一一下

    pip list
    

    最后检查防火墙等

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月12日
  • 已采纳回答 2月4日
  • 修改了问题 1月29日
  • 创建了问题 1月20日

悬赏问题

  • ¥15 设计数字电路得到要求结果
  • ¥15 hfss 组天线阵列报错:The A and B vectors must be parallel to the XY plane,如何解决?
  • ¥30 ansible连接设备报错
  • ¥60 pmsampsize包取值问题
  • ¥15 波形合成电路的设计学习
  • ¥15 unity脚本挂不上
  • ¥15 数学建模数学建模需要
  • ¥20 Java Sound Api 调用Mixer.getLine偶现Line unsupported错误。
  • ¥15 使用cuda加速opencv运算但是报错AttributeError: module 'cv2.cuda' has no attribute 'getCudaEnabledDeviceCount'
  • ¥15 java输入输出异常