Wie starte ich ein Python-Skript in C#?
Diese Art von Frage gestellt wurde, bevor Sie in unterschiedlichem Grad, aber ich empfinde es wurde nicht beantwortet auf übersichtliche Weise und so bitte ich Sie es erneut.
Ich möchten, führen Sie ein Skript in Python. Sagen wir mal so:
if __name__ == '__main__':
with open(sys.argv[1], 'r') as f:
s = f.read()
print s
Welche bekommt einen Speicherort der Datei, liest es, und gibt dann Ihren Inhalt. Nicht so kompliziert.
Okay, also wie führe ich das in C#?
Dies ist, was ich jetzt habe:
private void run_cmd(string cmd, string args)
{
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = cmd;
start.Arguments = args;
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
using (Process process = Process.Start(start))
{
using (StreamReader reader = process.StandardOutput)
{
string result = reader.ReadToEnd();
Console.Write(result);
}
}
}
Wenn ich den pass der code.py
Lage als cmd
und die filename
Lage als args
es funktioniert nicht. Mir wurde gesagt, ich sollte pass python.exe
als cmd
, und dann code.py filename
als args
.
Bin ich auf der Suche für eine Weile jetzt, und kann nur Menschen finden, die darauf hindeutet, zu verwenden, IronPython oder so. Aber es muss doch eine Möglichkeit zu nennen, ein Python-Skript in C#.
Einige Klarstellungen:
Muss ich laufen, es von C#, ich muss erfassen Sie die Ausgabe, und ich kann nicht mit IronPython oder irgendetwas anderes. Was hack Sie werden in Ordnung sein.
P. S.: Die eigentlichen Python-code bei mir läuft, ist viel komplexer als diese, und es gibt Ausgaben, die ich brauche in C#, und das C# - code werden ständig Aufruf das Python.
Behaupten, das ist mein code:
private void get_vals()
{
for (int i = 0; i < 100; i++)
{
run_cmd("code.py", i);
}
}
Ist es Ihnen gestattet, IronPython?
das ist okay, ich muss nur in der Lage sein, um es durch c# und fangen Sie die Ausgabe.
InformationsquelleAutor Inbar Rose | 2012-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund, warum es nicht funktioniert ist, weil Sie haben
UseShellExecute = false
.Wenn Sie nicht die shell verwenden, müssen Sie die Versorgung der vollständige Pfad zu dem python-Programm
FileName
, und bauen Sie denArguments
string Versorgung sowohl Ihr Skript und die Datei, die Sie Lesen möchten.Beachten Sie auch, dass Sie nicht
RedirectStandardOutput
es sei dennUseShellExecute = false
.Ich bin mir nicht ganz sicher, wie der argument-string formatiert werden soll für python, aber Sie müssen so etwas wie dieses:
c:\python26\python.exe
alscmd
und dannc:\temp\code.py c:\temp\testfile.txt
alsargs
sollte es funktionieren?Ich aktualisiert, mit einem schnellen Beispiel, ich lief in das gleiche Problem wenn ich habe etwas ähnliches mit Knoten
nicht für mich arbeiten. nicht heben irgendwelche Fehler, aber funktioniert auch nicht...
okay, es funktioniert bei mir jetzt. das problem ist, dass Sie zu formatieren müssen die Saiten sehr sorgfältig. alle Pfade müssen
"PATH"
auch wenn es keine Räume... seltsam...Werke ohne Angabe des Pfades, wenn Sie den Python-installer gesagt wurde, zum hinzufügen von Python-Verzeichnis in die Umgebungsvariable PATH (system-oder Benutzer-spezifisch).
InformationsquelleAutor Master Morality
Wenn Sie bereit sind, zu verwenden, IronPython, können Sie Skripts ausführen, die direkt in C#:
Holen Sie sich IronPython hier.
Sie hätte zu installieren, IronPython, das ist open source. Ich habe aktualisiert die Antwort.
beachten Sie, dass IronPython und Python sind nicht genau das gleiche. Nur für das Protokoll...
1. Ist IronPython-kompatibel ist .NET 3.5? 2. Kann ich Parameter übergeben während der Ausführung von python-Datei (diese Parameter werden Instanzen meiner eigenen Klassen)? Die meisten nützliche Sache wäre, wenn ich laufen konnte, nur eine Funktion aus python-Skript mit bekannten Namen und Argumente.
IronPython scheint es nicht zu unterstützen, den gleichen Satz von Funktionen der Sprache wie Python 3.6.x hat. Daher IronPython ist nur eine option, wenn Sie nicht verwenden alle diese Funktionen der Sprache. Es ist definitiv einen Versuch Wert, obwohl.
InformationsquelleAutor Chris Dunaway
Ausführen Python-Skript aus der C
Erstellen Sie ein C# - Projekt und schreiben Sie den folgenden code.
Python sample_script
Sehen Sie die 'Python C# Test' in der Konsole in C#.
InformationsquelleAutor Rohit Salunke
Ich lief in das gleiche problem-und Master-Moral, die Antwort habe es nicht für mich. Das folgende, das auf der Grundlage der vorherigen Antwort, hat geklappt:
Als ein Beispiel, cmd wäre
@C:/Python26/python.exe
und args wäreC://Python26//test.py 100
wenn Sie wollte ausführen test.py mit cmd-line-argument 100. Beachten Sie, dass der Pfad in der die .py-Datei nicht über das @ - symbol.Es ist genau das gleiche wie die Antwort oben nur Ihre Zuordnung mit dem Namen von einem parameter statt. Aber am Ende
start
hat die gleichen WerteInformationsquelleAutor Derek
Eben auch, Sie ziehen die Aufmerksamkeit auf diese:
https://code.msdn.microsoft.com/windowsdesktop/C-and-Python-interprocess-171378ee
Es funktioniert Super.
InformationsquelleAutor cs0815
Ich habe Probleme mit
stdin/stout
- wenn die payload-Größe übersteigt mehrere Kilobyte hängt es. Muss ich anrufen Python-Funktionen nicht nur mit ein paar kurze Argumente, aber mit eine benutzerdefinierte Nutzlast, könnte groß sein.Vor einer Weile schrieb ich einen virtuellen Schauspieler Bibliothek, die es ermöglicht zu verteilen Aufgabe auf verschiedenen Rechnern über Redis. Zu nennen Python-code, ich habe die Funktionalität, um Nachrichten Abhören von Python, verarbeiten diese und geben Ergebnisse zurück .NET.
Hier ist eine kurze Beschreibung, wie es funktioniert.
Funktioniert es auf einem einzelnen Rechner als auch, erfordert aber eine Redis Instanz. Redis fügt einige Zuverlässigkeit garantiert - Nutzlast wird so lange gespeichert, bis eine funktionierte, erkennt Abschluss. Wenn einer gearbeitet hat, stirbt, ist der payload wieder eine job queue und wird dann weiterverarbeitet, indem ein anderer Arbeiter.
Ich hatte bereits das system für .NET, also das hinzufügen von Python die Verarbeitung war sehr einfach und ich habe immer noch Vertrieb und Zuverlässigkeit - z.B. konnte ich post Nutzlast von einer Windows-Maschine und Prozess aus einer Linux-Maschine Dateien würde in diesem Fall nicht funktionieren.
Und wenn die Nutzlast ist wirklich groß, ich konnte einen pass mit dem Namen auf der gleichen Maschine oder S3 Verweis auf AWS, etc...
InformationsquelleAutor V.B.
Set WorkingDirectory oder geben Sie den vollständigen Pfad der python script in das Argument
InformationsquelleAutor LIU YUE
Eigentlich ist es ziemlich einfach zu machen, die die integration zwischen Csharp (VS) und Python mit IronPython. Es ist nicht so, dass viel komplexer ist... Als Chris Dunaway sagte bereits in Abschnitt Antwort begann ich mit dem Bau dieses inegration für mein eigenes Projekt. N seine ziemlich einfach.
Befolgen Sie einfach diese Schritte N erhalten Sie Ihre Ergebnisse.
Schritt 1 : Öffnen von VS und erstellen neue leere ConsoleApp Projekt.
Schritt 2 : Gehen Sie auf Extras --> NuGet-Paket-Manager --> Paket-Manager-Konsole.
Schritt 3 : Danach öffnen Sie diesen link in Ihrem browser und kopieren Sie die NuGet-Befehl.
Link: https://www.nuget.org/packages/IronPython/2.7.9
Schritt 4 : Nach dem öffnen Sie den obigen link kopieren der PM - >Install-Paket " IronPython -Version 2.7.9
Befehl, und fügen Sie Sie in der NuGet-Konsole in VS.
Es installiert die unterstützenden Pakete.
Schritt 5 : Dieser ist mein code, den ich verwendet haben, zu laufen .py-Datei gespeichert, in meinem Python.exe
- Verzeichnis.
Schritt 6 : speichern und ausführen des Codes
InformationsquelleAutor Daulmalik