我遇到了泡菜問題。 OSX和Linux之間的事情很好,但不是Windows和Linux。所有醃製的字符串都存儲在內存中,並通過SSL套接字發送。爲了100%清楚,我用「:::」替換了所有的\ n,並用「===」替換了所有的\ r。(沒有)。場景:Python泡菜scross平臺__dict__屬性錯誤
- 客戶贏:的Small Business Server 2011上運行的Python 2.7
- 客戶林:Fedora Linux系統上運行的Python 2.7
- 服務器:Fedora的Linux上運行的Python 2.7
客戶端林發送一個酸洗對象到服務器:
ccopy_reg:::_reconstructor:::p0:::(c__main__:::infoCollection:::p1:::c__builtin__:::tuple:::p2:::(VSTRINGA:::p3:::VSTRINGB:::p4:::VSTRINGC:::p5:::tp6:::tp7:::Rp8:::.
客戶贏發送挑對象服務器:
ccopy_reg:::_reconstructor:::p0:::(c__main__:::infoCollection:::p1:::c__builtin__:::tuple:::p2:::(VSTRINGA:::p3:::VSTRINGB:::p4:::VSTRINGC:::p5:::tp6:::tp7:::Rp8:::ccollections:::OrderedDict:::p9:::((lp10:::(lp11:::S'string_a':::p12:::ag3:::aa(lp13:::S'string_b':::p14:::ag4:::aa(lp15:::S'string_c':::p16:::ag5:::aatp17:::Rp18:::b.
出於某種原因,Windows客戶端與泡菜一起發送額外的信息,而當Linux客戶端嘗試加載鹹菜字符串,我得到:
Unhandled exception in thread started by <function TestThread at 0x107de60>
Traceback (most recent call last):
File "./test.py", line 212, in TestThread
info = pickle.loads(p_string)
File "/usr/lib64/python2.7/pickle.py", line 1382, in loads
return Unpickler(file).load()
File "/usr/lib64/python2.7/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib64/python2.7/pickle.py", line 1224, in load_build
d = inst.__dict__
AttributeError: 'infoCollection' object has no attribute '__dict__'
任何想法?
編輯 添加額外的請求的信息。
的infoCollection類的定義是相同的:
infoCollection = collections.namedtuple('infoCollection', 'string_a, string_b, string_c')
def runtest():
info = infoCollection('STRINGA', 'STRINGB', 'STRINGC')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
ssl_sock.connect((server, serverport))
ssl_sock.write(pickle.dumps(info))
ssl_sock.close()
和接收功能大致相同,但做了
p_string = ssl_sock.read()
info = pickle.loads(p_string)
也許安裝Pyhton 2.7.8你能告訴我們,做酸洗的代碼,並進入它的數據? – Evert 2013-02-19 14:14:28
在兩種環境中,類「infoCollection」的定義是否完全相同? – mgilson 2013-02-19 14:18:49
剛剛更新了帖子,提供了更多信息。 – Fmstrat 2013-02-19 14:36:39