OCaml与Cygwin问题

OCaml与Cygwin问题,cygwin,ocaml,Cygwin,Ocaml,我最近开始在我的Windows机器上使用OCaml,我一直在使用cygwin编译和执行我的程序。我最近不得不创建一个程序,使用Lexing.from\u channel stdin从stdin获取用户输入。我遇到的问题是,我输入了输入,但什么也没发生。在检查了一些东西之后,我发现没有迹象表明输入正在完成,所以程序只是在等待更多的输入。我在输入后尝试了ctrl-D,但什么也没发生,ctrl-z只显示停止了并结束了程序。此外,当我使用这些键时,cygwin经常会崩溃。有人知道如何在OCaml中为用户

我最近开始在我的Windows机器上使用OCaml,我一直在使用cygwin编译和执行我的程序。我最近不得不创建一个程序,使用
Lexing.from\u channel stdin
stdin
获取用户输入。我遇到的问题是,我输入了输入,但什么也没发生。在检查了一些东西之后,我发现没有迹象表明输入正在完成,所以程序只是在等待更多的输入。我在输入后尝试了ctrl-D,但什么也没发生,ctrl-z只显示
停止了
并结束了程序。此外,当我使用这些键时,cygwin经常会崩溃。有人知道如何在OCaml中为用户输入指示输入结束吗?

我的个人建议:如果您可以访问Unix或Mac OS X,请使用它们。在Windows上使用OCaml是痛苦的,除非你为此付费。在虚拟Unix环境(如VMWare)中使用OCaml是另一种选择

目前,我们在Windows中有3种OCaml风格:原生MS、原生MinGW和Cygwin。有关详细信息,请参阅

如果您对Windows中的OCaml有任何疑问,必须首先明确说明您使用的是哪种风格的OCaml。我怀疑你用MinGW OCaml代替Cygwin。有了这个组合,我就有了与你描述的完全相同的麻烦

  • Ctrl-D在MinGW OCaml中不被视为关闭stdin,因为它是Windows控制台应用程序
  • Ctrl-Z将关闭MinGW-OCaml中的stdin,但它首先由Cygwin终端获取,然后暂停该过程
  • 一旦通过Ctrl-Z“停止”,通常OCaml进程和终端会进入奇怪的状态,您必须杀死它们。(我想远离它,而不是跟踪真正发生的事情。)
  • 如果通过命令提示符执行MinGW-OCaml应用程序,则stdin工作正常
如果您更喜欢Cygwin,并且您的工作不涉及销售二进制可执行文件,那么使用Cygwin OCaml是一种好方法。但是,仍然很少有人在那里工作。我担心,即使在StackOverflow中,任何Cygwin OCaml特定的问题也可能得不到回答


也许我的观点太悲观了。我希望一些OCaml+MingW专家能提供更多的见解。

我没有使用过OCaml,但是--发布一个您认为应该有效但实际上无效的最小程序是个好主意,以防问题出在代码上,而不是输入方式上。(事实上,有人已经投票决定在你这么做之前搁置你的问题。)还有,要尝试的事情:如果你重定向标准输入(
your_ocaml_程序
other_命令| your_ocaml_程序
)会发生什么?这将真正迫使OCaml认识到输入已经结束。如果即使这样也不起作用,那么我真的认为问题可能在于你的代码(或者你是如何编译它的)。当我使用一个文件时,它工作得很好,只是当我在运行程序后将输入输入输入到stdin时,我发现了问题。我知道这一定是因为我在输入时没有正确地指示eof,但我已经尝试了很多方法来做到这一点,但似乎都不起作用