【问题标题】:F# programmatically running .fsx script fileF# 以编程方式运行 .fsx 脚本文件
【发布时间】:2011-08-04 07:52:00
【问题描述】:

我确信这一定很容易,但我似乎无法让它发挥作用。假设我有一个.fsx 脚本文件并希望以编程方式执行它。我猜想一定有人在某个时候写过关于这个的博客,但我似乎找不到一个可以执行我的简单场景的示例。基本上,我想以编程方式复制当您右键单击 .fsx 文件并选择“使用 F# Interactive 运行...”时发生的情况

【问题讨论】:

标签: scripting f# f#-interactive


【解决方案1】:

根据评论中的要求,您可以将 UseShellExecute 设置为 false 以避免打开 Windows shell。这样,您可以直接在 F# 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

【讨论】:

  • 谢谢,这确实解决了我发布的代码 sn-p 中的一个恼人问题。 :)
【解决方案2】:

在随机弄乱命令行参数后,我终于让它工作了。我觉得回答我自己的问题有点蹩脚,但希望它仍然可以帮助别人。原来我的困惑是命令行参数的正确使用。如果有人有比我说的更优雅或更有用的东西,我会把答案奖励给你。

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

【讨论】:

  • 我刚刚意识到我用驼峰式写了launchExecutable。显然,函数式编程风格让我陷入了黑暗的一面。 ;)
猜你喜欢
  • 2017-08-20
  • 2013-02-28
  • 2011-03-07
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
相关资源
最近更新 更多