【问题标题】:clojure lein (read-line) stdin woesclojure lein (read-line) 标准输入问题
【发布时间】:2010-09-24 20:52:01
【问题描述】:

所以常规的 clojure repl 工作正常,(read-line) 收集输入,然后回显它。但是,使用 lein repl 不会回显任何输入字符,也不会允许我从任何标准输入读取命令返回。

我确定这与重新绑定 in 有关,但想知道是否有解决方法/修复?

谢谢。

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

    这是由于 ant 中的错误造成的;它防止使用它启动的子进程中的标准输入流。但是 telnet 技巧应该可以工作,因为 lein repl 启动了一个套接字 repl 服务器;它在这里工作正常。

    【讨论】:

    • 谢谢,我会试一试,虽然这个问题实际上表现在粘液中,但我的帖子将其缩小到 repl/swank,但 telnet 不适合我。有趣的是,蛋糕中不存在这个问题。 Cake's (read-line) 不会挂起,而是以空字符串返回。你是说我可以启动 lein swank,然后当它到达(读取行)和块时,我可以通过 telnet 连接,尽管将它用于任何 stdin 内容,然后将反映在 repl/swank 中?跨度>
    • 那很奇怪;我不明白 telnet 怎么会这样失败。但我只是向 lein repl 推送了一个错误修复,现在 read-line 在 repl 中为我工作。让我知道它在最新的 1.4.0-SNAPSHOT 中是否适合您;如果没有,请打开一个问题或启动一个邮件列表线程。
    【解决方案2】:

    通过 telnet 连接到 REPL。

    $ lein repl
    REPL started; server listening on localhost:63849.
    user=> 
    [1]+  Stopped                 lein repl
    $ telnet localhost 63849
    Trying ::1...
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    user=> (read-line)
    hello
    "hello"
    user=>
    

    【讨论】:

    • 这里不起作用,telnet localhost port 不会出现任何 repl 提示。我已经尝试了最新版本和开发版本。我在 OSX 上使用 jse 1.6,这并不重要,只是想看看我们是否有等效的配置。
    • 这里是带有 jdk 1.6 的 Ubuntu。检查您的 /etc/hosts 文件。 localhost 是否绑定到 127.0.0.1?您是否正确设置了 lein 过程的背景?也许尝试在不同的终端窗口上启动 lein 和 telnet?如果做不到这一点,我建议你试试cake (assembla.com/wiki/show/clojure/Getting_Started_with_Cake)。
    【解决方案3】:

    这对我现在有用: 使用 ns swank.core [因为 swank-clojure 1.4+ 我相信] 中的宏 with-read-line-support 来包装您的 read-line 调用:

    (use 'swank.core)
    (with-read-line-support 
      (println "a line from Emacs:" (read-line)))
    

    感谢 Tavis Judd 的修复。

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 2012-03-25
      • 2010-10-17
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多