Python Pyserial持久化配置

Python Pyserial持久化配置,python,linux,serial-port,pyserial,Python,Linux,Serial Port,Pyserial,我有以下代码用于将文件大小从linux机器发送到嵌入式设备: #send length device_port = serial.Serial("/dev/ttyUSB1", 115200, timeout=3) device_port.write(program_length_str) #get response answer = device_port.readline() if answer != "OK": print "Size transmit failed:"

我有以下代码用于将文件大小从linux机器发送到嵌入式设备:

#send length
device_port = serial.Serial("/dev/ttyUSB1", 115200, timeout=3)
device_port.write(program_length_str)

#get response
answer = device_port.readline()
if answer != "OK":
        print "Size transmit failed:"
        print `answer`
        device_port.close()
        quit()
问题是,当我运行此代码时(在这里它总是退出),程序员(通过相同的串行端口将固件加载到设备)退出,并出现
错误的文件描述符。重新安装设备(没有内部能源)没有帮助,我必须重新启动电脑。Python代码有什么问题?即使在我重新插入设备(FT2232)时,坏设置怎么可能保持不变

使用cutecom打开端口可以对设备进行编程,但当我再次关闭它时,错误又回来了

更新1:使用
strace
我发现第一个区别在于锁: open("//var/lock/LCK..ttyUSB1", O_RDONLY) = 4 在成功加载开始时打开(“//var/lock/LCK..ttyUSB1”,O_RDONLY)=4

open("//var/lock/LCK..ttyUSB1", O_RDONLY) = -1 ENOENT (No such file or directory) open(“//var/lock/LCK..ttyUSB1”,O_RDONLY)=-1 enoint(没有这样的文件或目录) 一旦失败。第二个差异(和整个错误)可能是加载程序中的bug,所以我写在(他们考虑<代码>读())/代码>返回0是一个错误,调用<代码> PrRoR()/<代码>,但是没有错误,因此EBAFD被存储在早期的ErNO中。但我对这些锁很好奇。我在cutecom或python脚本(使用strace)中找不到任何引用,但是锁受到了某种影响。是否可以将此问题迁移到Unix和Linux站点

更新2:正如我前面提到的,问题是串行端口上的
read()
返回0。当我关注这个问题时,我发现read()应该在非阻塞模式下阻塞或返回EAGAIN。在什么情况下read()调用可以返回0


更新3:我通过使用
select()
调用等待设备来“解决”加载程序的问题。PySerial更改端口中的某些内容仍然存在问题。

我认为您的问题与Python无关

我在使用Ubuntu编程我的Arduino时也遇到了同样的问题——有时候,在多次插入和拔出之后,Ubuntu再也认不出我的设备了。然后它就没有出现在
/dev/


我想这也是你问题的根源<代码>错误的文件描述符
最类似于告诉您指定的路径实际上不存在。您是否检查了
/dev/ttyUSB0
?如果这不起作用,我建议将您的安装升级到可用的最新版本。

我在python串行和ubuntu上做了很多工作,问题是ubuntu如何“装载”串行端口,有时会出现故障,以及


你能发布你的dmesg输出吗?这可能有助于再次检查问题的根源。

Mononofu:请参阅第三次更新,我认为信息应该在那里,而不是在评论中。我记不清了,但我在发布这篇文章时已经放弃了Ubuntu。我不再有这个设备了。如果我再次处理它并设法重复这个错误,我肯定会在这里发布dmesg。您是否在同一个python解释器中多次运行它?如果是,是否在再次尝试打开tty设备之前先将其关闭?