2011-04-13 10 views
6

Estoy seguro de que esto debe ser algo realmente fácil, pero parece que no puedo hacer que funcione. Digamos que tengo un archivo de script .fsx y quiero hacer que se ejecute mediante programación. Supongo que alguien debe haber escrito sobre esto en algún momento, pero parece que no puedo encontrar un ejemplo que realice mi escenario simple. Básicamente, quiero duplicar programáticamente lo que sucede cuando haces clic con el botón derecho en un archivo .fsx y eliges "Ejecutar con F # Interactive ..."F # ejecutando programáticamente el archivo de script .fsx

+0

Hay una discusión aquí en incrustar el intérprete FSI: http://stackoverflow.com/questions/1563024/embedding-f-interactive – sukru

+0

Eso es un artículo interesante, pero demasiado serio para el escenario que estoy tratando de implementar. Gracias por mencionarlo. – Beaker

Respuesta

2

Como se le preguntó en un comentario, puede establecer UseShellExecute en false para evitar que se abra el shell de Windows. De esta manera, usted puede tener su salida directamente en Fa # shell:

open System.Diagnostics 

let execScript script = 
    let psi = new ProcessStartInfo(@"c:\Program Files\Microsoft F#\v4.0\Fsi.exe") 
    psi.Arguments <- script 
    psi.UseShellExecute <- false 
    let p = Process.Start(psi) 
    p.WaitForExit() 
    p.ExitCode 
+0

Gracias, eso soluciona un problema molesto en el fragmento de código que publiqué. :) – Beaker

1

Después de jugar aleatoriamente con la línea de comandos args finalmente lo conseguí. Me siento un poco cojo respondiendo mi propia pregunta, pero espero que todavía ayude a alguien más. Resultó que mi confusión era el uso correcto de los argumentos de la línea de comando. Si alguien tiene algo más elegante o generalmente útil que lo que puse, te otorgaré la respuesta.

open System.Diagnostics 

let launchExecutable() = 
    let proc = new Process() 
    proc.StartInfo.FileName <- @"C:\Program Files (x86)\Microsoft F#\v4.0\fsi.exe" 
    proc.StartInfo.Arguments <- @"--exec --nologo pathToFSXFile\Test.fsx" 
    proc.Start() 


launchExecutable();; 
+0

Me acabo de dar cuenta de que escribí launchExecutable en camel-case. Claramente, el estilo de programación funcional me está volviendo al lado oscuro de la fuerza. ;) – Beaker

Cuestiones relacionadas