2010-07-15 41 views
7

Acabo de terminar de codificar un modelo de transmisión de enfermedades de tamaño decente en C#. Sin embargo, soy bastante nuevo en .NET y no estoy seguro de cómo proceder. Actualmente, solo hago doble clic en el archivo .exe y el modelo importa la configuración de archivos de texto, hace lo suyo y muestra los resultados en un archivo de texto.Ejecuta una aplicación C# desde el script de Python

Lo que me gustaría hacer ahora es escribir un script en Python para hacer lo siguiente:

  • Ejecutar la simulación N veces (N> 1000)
  • Después de cada serie de cambiar el nombre del archivo de salida y tienda (es decir ./output.txt -> ./acc/outputN.txt)
  • agregada, analizar, y analizar las salidas
  • salida el resultado en un formato limpio (posiblemente sobresalir)

La mayor parte de mi experiencia de programación hasta la fecha ha estado en C/C++ en Linux. Estoy bastante seguro de los dos últimos artículos; sin embargo, no tengo idea de cómo proceder para los primeros dos. Aquí hay algunas preguntas específicas sobre las que me gustaría obtener consejos:

  • ¿Cuál es la forma más fácil/mejor de ejecutar mi C# .exe desde un script python?
  • ¿Alguien tiene consejos sobre la mejor manera de hacer operaciones de sistema de archivos en Python en un sistema Windows?

Gracias!

+0

Sólo por curiosidad, pero ¿por qué hacer el resto en Python (y no en C#)? –

+0

Si está buscando pruebas unitarias, intente NUnit: http://www.nunit.org/ – Bobby

+0

@Henk: quería evitar hacer cambios en el modelo en sí. Por lo tanto, hacer lo que quiero requiere escribir una nueva aplicación/script. El rendimiento de la solución no es importante, pero el tiempo necesario para codificarlo es. Pensé que un lenguaje de scripting sería mejor para un tipo de problema de secuencias de comandos. Además, me gusta más Python. :) – Mandelbrot

Respuesta

11

A partir de Python 2.6+ usted debe utilizar el módulo subprocess: (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 alguien que realmente conoce Python en lugar de solo mirar documentos como yo ... touche, esto debería marcarse como correcto. – kersny

+0

Perfecto, muchas gracias! – Mandelbrot

+1

Una mejora sería usar 'os.rename' en lugar de ejecutar 'move'. –

3

La respuesta a sus problemas se puede encontrar en 'os' en la biblioteca estándar de python. La documentación para realizar diversas operaciones, como el manejo de archivos y los procesos de inicio, se puede encontrar en here.

La gestión de procesos (Ejecutando su programa C#) se puede encontrar here y las operaciones de archivos son here.

EDITAR: En realidad, en lugar del enlace de proceso anterior, debe utilizar el subprocess module.

+0

Ah, exactamente lo que necesitaba. No puedo creer que no haya visto eso antes. ¡Muchas gracias! – Mandelbrot

Cuestiones relacionadas