python串口问题无法接收到返回数据

import time

import serial

def main():
    port_name = "COM5"  # 虚拟串口号,根据实际情况更改
    send_data = b"NUMeric:NORMal:VALue?\r\n"

    try:
        # 打开串口
        ser = serial.Serial(port_name, baudrate=9600, timeout=1)
        print("Serial port opened successfully")

        # 发送数据
        ser.write(send_data)
        print("Data sent successfully")

        # 接收数据
        time.sleep(0.5)
        read_data = ser.readline()
        print(f"Received data: {read_data.decode().strip()}")

        # 关闭串口
        ser.close()
        print("Serial port closed")
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    main()

有无python串口明白人知道此程序为什么可以通过串口向模拟设备发送指令但是不能收到模拟器的返回指令,查过很多,也用串口助手调试过,但是这个程序都是不行,可以指正问题吗?
万分感谢

img

【相关推荐】



  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1053981
  • 你也可以参考下这篇文章:python 异常处理编程 编写程序,在完成上一题功能的基础上。要求考虑输入非法情况,如果输入的数不合法,要求让其重新输入,直至输入一个分数。
  • 你还可以看下python参考手册中的 python- 定义扩展类型:已分类主题- 终结和内存释放
  • 您还可以看一下 jeevan老师的Python量化交易,大操手量化投资系列课程之内功修炼篇课程中的 讲师简介,量化交易介绍及自动化交易演示小节, 巩固相关知识点
  • 除此之外, 这篇博客: Python在自动化运维中的应用之批量配置交换机中的 :批量管理配置交换机,先将所有交换机通过telnet开启配置ssh,而后通过ssh方式远程批量管理交换机.【遇到故障交换机跳过执行下面配置】 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    1. 怎么安装python环境这里就说了,这里是基于python2.7.5开发的,安装好python后还需要安装可以配置交换机基础库paramiko, 这个模块可以与很多类型的交换机连接。

    安装方式:

    1. 先安装pip,再安装paramiko库

    curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
    python get-pip.py
    
    pip install paramiko

    2. 安装好之后可以在项目里面通过import paramiko来引用这个库接口

    
    #!/usr/bin/env python
    import paramiko

    3.通过项目实例来实现批量配置思科交换机:

    先通过ciscolib库方式来配置交换机:这里是通过文件来管理交换机的IP地址。

    # -*- coding: utf-8 -*-
    import ciscolib
    
    def main():
        PASSWORD="wfweb2kd"
        USERNAME="root"
        ENABLE_PWD="c#andphp"
    
        for ip in open('sw2960.txt').readlines():
            ip = ip.strip()
    
            if USERNAME != "":
                switch = ciscolib.Device(ip, PASSWORD, USERNAME, ENABLE_PWD)
            else:
                switch = ciscolib.Device(ip, PASSWORD, enable_password=ENABLE_PWD)
    
            try:
                switch.connect()
                print("Logged into %s,Successful" % ip)
            except ciscolib.AuthenticationError as e:
                print("Couldn't connect to %s: %s" % (ip, e.value))
                continue
            except Exception as e:
                print("Couldn't connect to %s: %s" % (ip, str(e)))
                continue
    
            switch.enable(ENABLE_PWD)
            switch.cmd("clock set 18:42:30 22 Apr 2019")
            switch.cmd("conf t")
            switch.cmd("service password-encryption")
            switch.cmd("username admin secret admin123") #//这里只是测试,实际环境不要这样
            switch.cmd("line vty 0 4")
            switch.cmd("login local")
            switch.cmd("crypto key generate rsa") 
            switch.cmd("\n") 
            #//这里只是测试最好是一条一条测试好了再上批量,这里踩了一个坑。
            switch.cmd("end")
            switch.cmd("wri mem")
            switch.disconnect()
    
    if __name__ == '__main__':
        main()

    4.配置成功之后可以通过ssh方式来连接配置,上面配置目的是启动交换机的 ssh加密连接22,但是这里也要注意有些交换机是没有ssh模块的也就是没有的。

    [sw2960#]crypto key generate rsa

    5.配置ssh来配置交换机:

    #!/usr/bin/env python
    import paramiko
    import time
    import getpass
    import sys
    import socket
    
    username = raw_input("用户名:")
    password = getpass.getpass("密码:")
    ip_file = sys.argv[1]
    cmd_file = sys.argv[2]
    
    switch_with_authentication_issue = []
    switch_not_reachable = []
    
    f = open(ip_file,'r')
    for line in f.readlines():
       try:
            ip = line.strip()
            ssh_client = paramiko.SSHClient()
            ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh_client.connect(hostname=ip,username=username,password=password,look_for_keys=False)
            print "你已经成功连接到: ", ip
            command = ssh_client.invoke_shell()
            cmdlist = open(cmd_file,'r')
            cmdlist.seek(0)
            for line in cmdlist.readlines():
                    command.send(line + "\n")
            time.sleep(2)
            cmdlist.close()
            output = command.recv(65535)
            print output
       except paramiko.ssh_exception.AuthenticationException:
            print "用户认证失败的" + ip + "."
            switch_with_authentication_issue.append(ip)
       except socket.error:
            print ip + "不可达,请检查网络."
            switch_not_reachable.append(ip)
    f.close()
    ssh_client.close
    
    print '\n 以下交换机认证失败:'
    for i in switch_with_authentication_issue:
            print i
    print '\n 以下交换机网络不可达:'
    for i in switch_not_reachable:
            print i
    

    下面贴出来,IP文件和命令文件写法:

    执行结果 :


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^