我正在处理一个项目,在这个项目中,我想使用相同的UART进行几次迭代,但不是每次都打开和关闭它。因此,我试图使用泡菜将串行对象写到文件中,这样我就可以在任何我想要的文件中解压缩它,而不需要每次连接到串口的开销。
然而,我遇到了错误。这是我的密码:
import sys
import serial
import pickle
ser = serial.Serial('/dev/tty1', 19200)
f = open('myfile.dat', 'wb+')
P = pickle.Pickler(f)
lineOCode = 'LOLOLOL'
P.dump(ser)
我收到了错误信息,告诉我我不能挑选一个串行对象。(端口打开得很好,有问题的是泡菜函数。)
结果:
File "serial_pick.py", line 9, in <module>
P.dump(ser)
File "/usr/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/usr/lib/python2.7/pickle.py", line 306, in save
rv = reduce(self.proto)
File "/usr/lib/python2.7/copy_reg.py", line 80, in _reduce_ex
dict = self.__dict__
TypeError: this __dict__ descriptor does not support 'Serial' objects
有什么想法吗?谢谢!
发布于 2014-03-17 21:04:11
我不认为你能腌制出这样的东西:
你能吃点什么? 通常,如果可以选择对象的每个属性,则可以对任何对象进行分类。类、函数和方法不能被腌制--如果你对一个对象进行腌制,对象的类就不会被腌制,而只是一个字符串来识别它属于哪个类。这对于大多数泡菜来说都很好(但请注意关于长期储存泡菜的讨论)。 使用泡菜协议v1,您不能选择打开的文件对象、网络连接或数据库连接。当你想到它的时候,它是有意义的--当你打开你的对象时,泡菜不能让文件对象的连接存在,而创建连接的过程超出了泡菜可以自动为你做的事情。如果您真的想要挑选一些具有导致问题的属性的东西,请查看getstate、setstate和getinitargs的泡菜文档--使用这些属性可以排除有问题的属性。 使用泡菜协议v2,您可以对打开的文件对象进行筛选。这将在将来的Python版本中发生变化。有关更多信息,请参见此错误报告。
https://stackoverflow.com/questions/22464702
复制相似问题