我有服务器和客户机程序,它们通过网络套接字相互通信。在
我想要的是通过套接字发送从scandir.scandir()
获取的目录项(scandir.DirEntry
)。在
目前,我正在使用pickle
和cPickle
模块,并提出了以下内容(仅摘录):
import scandir, pickle
s = scandir.scandir("D:\\PYTHON")
entry = s.next()
data = pickle.dumps(entry)
但是,我得到了以下错误堆栈:
^{pr2}$我怎样才能消除这个错误?在
我听说过使用marshall
或{JSON
没有转储对象中的所有数据。在
有没有完全不同的方法通过套接字发送对象?在
提前谢谢你的帮助。在
是的,
os.DirEntry
对象是短期的,不是真正的保留或序列化的。如果您需要序列化其中的数据,那么看起来您已经在自己的答案中解决了序列化(pickle)所需属性的dict版本。在要反序列化为一个像
os.DirEntry
实例那样行走和嘎嘎叫的对象,请创建一个模仿您需要的东西的PseudoDirEntry
类。在请注意,您已经可以直接序列化stat对象,这样就省去了从中挑选字段的麻烦。在
综合起来,应该是这样的:
然后:
^{pr2}$我自己已经发现,对于像这样的非标准类的实例,
scandir.DirEntry
,最好的方法是将类成员数据转换成标准对象的组合(可能是嵌套的),比如(list
,dict
,等等)。在例如,在
scandir.DirEntry
的特定情况下,可以按如下方式进行。在尽管出于我的目的,我只需要数据,但在另一端取消拾取之后,可能需要将未拾取的
entry_
重构为未拾取的scandir.DirEntry
对象“entry”。但是,我还没有弄清楚如何重构类实例,以及如何为诸如is_dir()
,stat()
等方法的行为设置数据。在相关问题 更多 >
编程相关推荐