gpt4 book ai didi

.net - 如何将标准输入管道与 fsharpi (fsi) 和单声道一起使用

转载 作者:IT王子 更新时间:2023-10-29 00:39:32 25 4
gpt4 key购买 nike

我使用 fsharpi (fsi) 作为后台编译进程,使用 System.Diagnostics.Process 生成进程。我的 ProcessStartInfo 设置如下所示:

let psi = new ProcessStartInfo()
psi.UseShellExecute <- false
if System.Environment.OSVersion.Platform = PlatformID.Unix
then
psi.FileName <- "/usr/bin/mono"
psi.Arguments <- "/usr/lib/fsharp/fsi.exe"
else
psi.FileName <- @"C:\Program Files (x86)\Microsoft F#\v4.0\fsi.exe"
psi.Arguments <- ""
psi.WorkingDirectory <- "some workdir"
psi.CreateNoWindow <- true
psi.RedirectStandardError <- true
psi.RedirectStandardInput <- true
psi.RedirectStandardOutput <- true

我的流程是这样创建的:

let proc = Process.Start(psi)

之后我使用 stdin 发出我的代码:

proc.StandardInput.WriteLine(myCode+";;"+Environment.NewLine)
proc.StandardInput.Flush()

这适用于带有标准设置的 VisualStudio 的 Windows 7 - 不幸的是它不适用于 linux(ubuntu 11.04,Mono JIT 编译器版本 2.6.7(Debian 2.6.7-5ubuntu3),F#,Microsoft(R)F#2.0 Interactive build 2.0.0.0) [注意:从源代码构建的 mono 2.10 相同]。无论如何,StandardOutput 在两个平台上都可以正常工作。

编辑:阐明如何/什么不起作用:在收到标准启动输出(F#、Microsoft (R) F#...)后,我通过重定向输入流发送一些代码(比如说让 foo x = x * 2) .使用重定向输出(使用 proc.StandardOut.ReadLine() 但 ReadLine 永远不会返回!

我怀疑这是运行 fsharpi 的(额外进程)单声道问题或平台问题(换行符等)。

为了排除第二种可能性,我尝试了手动管道。为此,我创建了一个包含以下内容的文件:

"#quit;;[NEWLINE]"

[NEWLINE 代表 Unix endlines 和 windows 风格 EOL]

使用以下命令(Windows):

fsi.exe < thefileDescribedAbove

或分别(linux)

fsharpi < thefileDescribedAbove

正如预期的那样,它可以在 Windows 上运行(打开 FSI 并立即退出),但在 Linux 上会停止运行(如 ;; 或未收到 NEWLINE)。鉴于此测试中的奇怪结果,我怀疑我的方法存在更根本的问题(希望不是)。

非常感谢

最佳答案

经过长时间毫无意义的 bughunt:fsi 的“--readline-”参数解决了这个问题!感谢所有的追踪:-)

(实际上我很久以前就试过这个 - 显然我当时把我的测试搞砸了)

关于.net - 如何将标准输入管道与 fsharpi (fsi) 和单声道一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com