如何使用getContents从命令行获取输入?

时间:2012-03-01 00:43:52

标签: haskell

我的程序允许用户指定一个作为输入读取的文件,但这是可选的。如果用户没有指定文件,我想从命令行读取输入。

到目前为止,我有这个:

main :: IO()
main = do
  (opts, mbArgs) <- parseCmdLine
  input <-
    case mbArgs of
      Nothing   -> getContents
      Just file -> readFile file

这似乎不起作用。当用户没有规定文件时,他们可以输入输入,但似乎无法终止,以便程序可以对该输入进行处理。

我认为你必须按Ctrl + D,但这没有做任何事情。

感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

在典型的类Unix终端中(例如Cygwin,至少在Cygwin的rxvt中;不确定Windows命令提示符), Ctrl + D 只在你开始一行时才发送EOF。如果你点击 Enter 然后 Ctrl + D ,它应该可以工作。如果您想在没有换行的情况下发送EOF,请连续两次点击 Ctrl + D

如果不是这样,那么你的终端可能还有其他一些问题;代码看起来很好。

答案 1 :(得分:0)

我要写哈马尔的评论作为答案。

在Windows上,对我来说,点击ctrl+Z crtl+Z enter是有效的。