F # программно работает файл сценария .fsx - PullRequest
6 голосов
/ 13 апреля 2011

Я уверен, что это должно быть что-то действительно легкое, но я не могу заставить его работать. Допустим, у меня есть файл сценария .fsx и я хочу, чтобы он выполнялся программно. Я предполагаю, что кто-то, должно быть, писал об этом в какой-то момент, но я не могу найти пример, который выполняет мой простой сценарий. По сути, я хочу программно продублировать то, что происходит, когда вы щелкаете правой кнопкой мыши по файлу .fsx и выбираете «Выполнить с помощью интерактивного интерактивного ввода ...»

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Как указано в комментарии, вы можете установить UseShellExecute в false, чтобы не открывать оболочку Windows.Таким образом, вы можете получить свой вывод непосредственно в оболочке F #:

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
1 голос
/ 13 апреля 2011

После случайного возни с аргументами командной строки я наконец-то заставил его работать. Я чувствую себя немного неубедительно, отвечая на мой собственный вопрос, но, надеюсь, это все равно поможет кому-то еще. Оказалось, что моя путаница заключалась в правильном использовании аргументов командной строки. Если у кого-то есть что-то более изящное или вообще полезное, чем то, что я положил, я наградлю вас ответом.

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();;
...