Samstag, Juni 6, 2020

Die übergabe von Daten zwischen Python und C# ohne schreiben einer Datei

Ich gerne weitergeben möchte binäre Daten zwischen Python und C#. Ich würde davon ausgehen, dass Sie können öffnen Sie ein standard-in – /- out-Kanal und Lesen und schreiben ist wie eine Datei, aber es gibt eine Menge von beweglichen teilen, und ich weiß nicht C# zu gut. Ich will, das zu tun diese Art der Sache, aber ohne schreiben einer Datei.

# python code
with open(DATA_PIPE_FILE_PATH, 'wb') as fid:
    fid.write(blob)
subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH)
with open(DATA_PIPE_FILE_PATH, 'rb') as fid:
    'Do stuff with the data'

//C# code
static int Main(string[] args){
    byte[] binaryData = File.ReadAllBytes(DataPipeFilePath);
    byte[] outputData;
    //Create outputData
    File.WriteAllBytes(outputData)

Habe ich versucht, verschiedene Möglichkeiten der Verwendung von standard-in/out, aber ich habe kein Glück Abgleich bis, wie ich schon sagte, es gibt eine Menge von beweglichen teilen. Ich habe versucht, Dinge wie

p = subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write(blob)
p.stdin.close()

oder

p = subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate(blob)

auf der python-Seite zusammen mit

TextReader tIn = Console.In;
TextWriter tOut = Console.Out;
String str = tIn.ReadToEnd();
//etc...

sowie ein paar andere Dinge, die nicht arbeiten, auf der C# Seite. Ich habe milden Erfolg mit einigen Dingen, aber ich habe es geändert um so viel, dass ich mich nicht daran erinnern, was funktioniert hat, was. Könnte jemand mir einen Tipp geben, welche Stücke am besten funktionieren, oder ob dies überhaupt möglich ist?

Den Daten die ich übergeben will, hat null und andere nicht-druckbare Zeichen.

  • warum nicht einfach verwenden python.NET? je nachdem, was du tust, es funktioniert ziemlich gut…
  • Verwandte: stackoverflow.com/q/7367976
  • Was ist python.net?
  • siehe reed ‚ s Antwort unten (verzeichneten wir fast zur gleichen Zeit), da hat er einen link gibt. Sie ermöglicht den Zugriff auf C# – Bibliotheken in einer Weise, die fast native – Sie können auch importieren Sie eine C# – Bibliothek in der Konsole, und einige interaktive Registerkarte Fertigstellung, etc.

2 Kommentare

  1. 3

    Dieser python-code korrekt war

    p = Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdout=PIPE, stdin=PIPE, stderr=PIPE)
    out, err = p.communicate(blob)

    Und auf der C# Seite, ich habe es auf Arbeit mit

    Stream ms = Console.OpenStandardInput();
  2. 1

    Eine Möglichkeit wäre so etwas wie Python für .NET, bietet die interop direkt zwischen C# und (standard -, C -) Python.

    Je nachdem, was Ihre Python-Routinen tun müssen, IronPython kann auch eine gute option sein, da dies direkt konsumierbare und verwendbar von in C#.

    Diese beiden Optionen zu vermeiden, versucht die Kommunikation über die Kommandozeile, als haben Sie direkten Zugriff auf die Python-Objekte aus .NET, und Umgekehrt.

    • Ich bekomme den gleichen Fehler wie hier beschrieben, stackoverflow.com/questions/14633695/…
    • stellen Sie sicher, Sie entsprechen der python.NET version, die Sie installieren, mit der version von python geben, die Sie haben – das mischen der beiden kann die Ursache für komische Fehler wie, dass.
    • Die Versionierung mit python/python .NET ist in der Regel das Hauptproblem.

Kostenlose Online-Tests