Pingle zwischen Python und IronPython übergeben

8

Ich habe Probleme beim Laden einer Beize in Python, die in IronPython abgelegt wurde.

Wenn ich in IronPython etwas Grundlegendes wie "[1,2,3]" picke, wird das Pickel in Python geladen. Aber, wenn ich Ergebnisse aus der DB-Abfrage unten in IronPython pickel, erhalte ich die Fehlermeldung "Kein Modul namens clr" beim Versuch, die Beize in Python zu laden.

Was könnte schief gehen? (Und gibt es eine bessere Möglichkeit, Daten zwischen Python und IronPython zu teilen?)

%Vor%     
MPJ 12.07.2012, 18:14
quelle

2 Antworten

4

Das Beizen ist in der Tat ein guter allgemeiner Weg, Daten zwischen Pythons zu teilen (wenn Sie den Daten vertrauen können und wissen, dass sie nicht manipuliert wurden). Aber es ist nur gut für einfache, eingebaute Typen. Wenn Sie Objekte von speziellen Typen haben (zB was auch immer die Ergebnisse von GetData() sind), dann wird der vollständig qualifizierte Name der Klasse in den Pickling eingebettet, und nur hoffen, dass der Python am anderen Ende weiß, wie er diese Klasse findet Wiederherstellen es. Unnötig zu sagen, dass dies sehr unordentlich werden kann, wenn Sie nicht vorsichtig sind.

Versuchen Sie, Ihre results1 , results2 -Werte in einfache Typen wie (möglicherweise verschachtelte) Tupel, Dicts, Listen usw. zu konvertieren.

    
the paul 12.07.2012, 18:21
quelle
2

Die Daten, die Sie picken, bestehen nicht aus generischen Python-Objekten, sondern haben einige Objekte, die implementierungsabhängig sind. clr ist ein IronPython-spezifisches Modul, da sein Name eine Verbindung zu .NET impliziert. Wenn ich Ihre Daten ansehe, würde ich vermuten, dass dies etwas mit Ihren Datetime-Objekten ist.

Verwenden Sie für Ihre serialisierten Daten ein anderes Format als "datetime", z. B. UNIX epoch time:

%Vor%     
mrb 12.07.2012 18:22
quelle