C# mit Python?
Ich arbeite gerade an einem kleinen Projekt. Bei dem brauche ich in Python Informationen aus C#. Wie kann man die verbinden?
6 Antworten
Was genau macht das C# Programm und welche Daten liefert es?
Ich sehe versch. Möglichkeiten:
- Das C# Programm wird von Python aufgerufen - zB subprocess.check_output() und die Ausgaben des Programms landen in einer Variable
- Das C# Programm ruft Python auf und übergibt die Daten
- Das C# Programm schreibt eine Log- oder Ausgabe-Datei die dann von Python gelesen wird - wächst die Datei zB ständig an dann kann man sich in Python die Nummer der letzten Zeile aus dem aktuellen Durchlauf merken und dann überspringen - zB with open(...) as f.
- Ist das C# Programm auf einem anderen PC dann könnte man eine API verwenden und das C# Programm bietet einen kleinen Serverdienst an der von Python aus angesprochen wird - zB mit socket oder requests.
- Das C# Programm liefert die Daten an Python. Dazu kannst du mit versch. Modulen einen kleinen Server erstellen der die Daten annimmt.
- etc.
Sollte das C# Programm binäre Daten liefern müsste man die oben genannten Methoden etwas anpassen.
Außerdem kommt es drauf an welche Daten du in Python brauchst und wie groß diese sind...
Natürlich gibt es einige andere Methoden wie das einbinden von DLLs mit ctypes oder IronPython, Python for .NET, etc.
Ganz “dämlich”:
C# Programm holt die Daten und speichert sie in eine Datei (ergebnis.txt)
Das Pythonprogramm startet das C# Programm, wartet bis es fertig ist und liest dann einfach ergebnis.txt.
Ansonsten könnte man sowas natürlich auch über einen lokalen Socket mit TCP schicken, ist aber nicht so trivial wie die Datei!
Das kommt jetzt auf die Schnittstelle an.
Erhältst du die Infos über ein fertiges C# Programm oder willst du eine C# DLL in Python einbinden?
Für ersteres brauchst du irgendeine Art von API für das Programm, das kann jetzt ein Datenaustausch über Pipes, Networkports etc. oder auch einfach nur über stdin und stdout sein.
Für zweiteres gehts soweit ich weiß mit dem normalen Pythoninterpreter nicht und du musst Ironpython verwenden.
Ja das sollte auch funktionieren. Ist hald nicht mehr Platformunabhängig.
Kannst die Methoden in der C# Library nach außen hin sichtbar machen, und dann aus Python aufrufen
Ich meine nur das man sie nach außen Sichtbar macht. Ich glaub nicht dass man die dann so leicht mit Python abrufen kann.
Mit Ironpython gehts, für eine allgemeinere Schnittstelle müsste man in C einen Translationlayer machen. Ich kenn mich aber mit Python noch nicht sonderlich gut aus, kann auch sein, dass man das Com Interop oder CLR Hosting API direkt verwenden kann.
Auf demselben System?
Wie kommen die Dtane zustanden?
Wird das C#-Programm nur kurz gestartet?
Warum mischt du das überhaupt?
Auf dem Selben System und das C# Programm läuft dauerhaft.
Es fehlt noch eien Variante (IMHO): Den PythonInterpreter komplett in das eigene C# einbinden. In C ist das 'Straightforward, insofern müßte sich mit einem Shim/Wrapper das doch auch in C# umsetzen lassen?