2010-10-07 13 views
5

Mi stavo chiedendo se gli oggetti serializzati usando CPython's cPickle siano leggibili usando cPickle di IronPython; gli oggetti in questione non richiedono alcun modulo al di fuori dei built-in compresi sia Cpython che IronPython. Grazie!compatibilità tra CPython e IronPython cPickle

risposta

2

Se si utilizza il protocollo predefinito (0) che è basato sul testo, le cose devono essere eseguite su. Non sono sicuro di cosa succederà se utilizzi un protocollo più alto. È molto facile provare questo ...

+1

Grazie per la risposta. È interessante sottolineare che "dovrebbe", perché in questo momento sto utilizzando il protocollo predefinito sia in CPython che in IronPython, cPickle, e ricevo errori "EOF inattesi". Sapresti di qualche motivo per cui questo potrebbe accadere? I miei file vengono letti e scritti rispettivamente nelle modalità 'rb' e 'wb'. – JustOnePixel

+2

Bene dovrebbe essere certamente vere bug del modulo. Ci sono test che includono sottaceti da una versione o un'altra che funzionano su runtime. Recentemente ho scritto del codice che usa l'output pickle di CPython combinato con unpickler di IronPython e non ha avuto problemi. L'unica differenza potenziale è che IronPython può generare stringhe unicode dove CPython emetterebbe stringhe ASCII. Ma quelli dovrebbero ancora mettere sottosopra/annullare le implementazioni. Riesci a ridurre il problema su un campione più piccolo? –

0

Funzionerà perché quando si annullano gli oggetti durante load() userà le definizioni correnti di qualsiasi classe che si è definita ora, non indietro quando gli oggetti sono stati decapitati.

IronPython è semplicemente Python con la libreria standard implementata in C# in modo che tutto emetta IL. Entrambi i moduli pickle di CPython e IronPython hanno la stessa funzionalità, tranne uno è implementato in C e l'altro in C#.