2011-04-13 63 views
1

我似乎无法找到一种方法来执行此操作。基本上,我想这样做的伪代码:F#使用F#Interactive从另一个脚本启动脚本

MainScript.fsx:

printfn “启动外部脚本”

推出Script1.fsx

printfn “完成”

Script1.fsx:

printfn “我SCRIPT1运行”

所以输出窗口应该显示(运行MainScript.fsx后):

“启动外部脚本”

“我SCRIPT1运行“

”完成“

基本上启动Script1.fsx是我不知道如何实现的方法。

由于提前,

鲍勃

+1

在FSI可以使用'#load“Script1.fsx”'将加载,编译和运行SCRIPT1加载它,但它输出像“装script1.fsx”一些额外的信息。 – khachik 2011-04-13 19:07:50

+0

这个问题有什么不同? http://stackoverflow.com/questions/5643120/f-programmatically-running-fsx-script-file – Laurent 2011-04-13 19:21:21

+0

上一个问题是在Visual Studio之外运行脚本,这是在IDE中运行它们进行原型设计和调试使用交互式窗口。 – Beaker 2011-04-13 19:26:58

回答

2

您可以使用ProcessStartInfo启动一个新的进程。您需要提供fsi.exe的路径,并将您的fsx文件用作参数。您需要将UseShellExecute设置为false才能在交互式shell中获得结果。

例如:

let exec fsi script = 
    let psi = new System.Diagnostics.ProcessStartInfo(fsi) 
    psi.Arguments <- script 
    psi.UseShellExecute <- false 
    let p = System.Diagnostics.Process.Start(psi) 
    p.WaitForExit() 
    p.ExitCode 

exec @"c:\Program Files\Microsoft F#\v4.0\Fsi.exe" "foo.fsx" 
+0

你能否让我回答以前的相关问题?我会把它标记为那个答案。我刚刚提到了一个函数,因为我没有意识到有一个名为#load的关键字可以做我真正需要的。 Khachik的评论是我在我的场景中需要做的。 – Beaker 2011-04-13 19:42:43

+0

我认为你可以为这两种情况使用相同的功能。对VS中的fsi和fsx文件中的执行使用相同的代码通常更方便。 – Laurent 2011-04-13 19:45:17

+0

好点。但是,仍然可以免费将您的答案添加到我的相关问题中。这比我发布的要好。 – Beaker 2011-04-13 19:48:05