2010-07-15 7 views
7

Ich habe gerade über ein codiertes Krankheitsmodell in C# abgeschlossen. Ich bin jedoch ziemlich neu in .NET und bin nicht sicher, wie es weitergehen soll. Momentan doppelklicke ich einfach auf die .exe-Datei und das Modell importiert die Konfigurationseinstellungen aus den Textdateien, macht seine Sache und gibt die Ergebnisse in eine Textdatei aus. Führen Sie eine C# -Anwendung aus dem Python-Skript

Was würde Ich mag als nächstes zu tun ist ein Python-Skript schreiben folgendes zu tun:

  • Führen Sie die Simulation N-mal (N> 1000)
  • Nach jedem Lauf die Ausgabedatei und speichern umbenennen (dh ./output.txt -> ./acc/outputN.txt)
  • Aggregate, analysieren und analysieren, die Ausgänge
  • Ausgang das Ergebnis in einigen sauberen Format (möglicherweise Excel)

Der Großteil meiner bisherigen Programmiererfahrung war in C/C++ unter Linux. Ich bin ziemlich überzeugt von den letzten beiden Punkten; Ich habe jedoch keine Ahnung, wie ich für die ersten beiden vorgehen soll. Hier sind einige spezifische Fragen, die ich gerne hätte:

  • Was ist der einfachste/beste Weg, um meine C# .exe von einem Python-Skript ausführen?
  • Hat jemand einen Hinweis auf die beste Möglichkeit, Dateisystemoperationen in Python auf einem Windows-System durchzuführen?

Vielen Dank!

+0

Einfach nur neugierig, aber warum machen den Rest in Python (und nicht in C#)? –

+0

Wenn Sie nach Komponententests suchen, versuchen Sie NUnit: http://www.nunit.org/ – Bobby

+0

@Henk: Ich wollte vermeiden, Änderungen am Modell selbst vorzunehmen. Um das zu tun, was ich will, muss man eine neue App/ein neues Skript schreiben. Die Leistung der Lösung ist nicht wichtig, aber die Zeit, die zum Codieren benötigt wird, ist. Ich dachte, eine Skriptsprache wäre besser für ein Scripting-Problem. Plus, ich mag Python mehr. :) – Mandelbrot

Antwort

11

Ab Python 2.6+ Sie das subprocess Modul verwenden sollten: (Docs)

import subprocess 

for v in range(1000): 
    cmdLine = r"c:\path\to\my\app.exe" 
    subprocess.Popen(subprocess) 
    subprocess.Popen(r"move output.txt ./acc/output-%d.txt" % (v)) 
+0

Ah-ha jemand, der Python wirklich kennt, anstatt nur Docs wie mich anzusehen ... touche, das sollte als richtig markiert werden. – kersny

+0

Perfekt, vielen Dank! – Mandelbrot

+1

Eine Verbesserung wäre die Verwendung von 'os.rename' anstelle von" move ". –

3

Die Antwort auf Ihre Probleme finden Sie in 'os' in der Python-Standardbibliothek. Dokumentation für verschiedene Operationen, wie z. B. Dateien bearbeiten und Prozesse starten, finden Sie unter here.

Prozessverwaltung (Ausführen Ihres C# -Programms) finden Sie here und Dateioperationen sind here.

EDIT: Eigentlich, anstelle der oben genannten Prozess Link, sollten Sie die subprocess module verwenden.

+0

Ah, genau was ich brauchte. Ich kann nicht glauben, dass ich das vorher nicht gesehen habe. Vielen Dank! – Mandelbrot