2010-09-24 8 views
7

Tak więc regularne kopiowanie clojure działa dobrze, (read-line) zbiera dane wejściowe, a następnie odszukuje je. Jednakże, nigdy nie odtwarza żadnych znaków wejściowych ani nie pozwala mi na powrót z jakichkolwiek poleceń odczytu standardowego.clojure lein (read-line) stdin woes

Jestem pewien, że ma to coś wspólnego z ponownym wiązaniem w, ale zastanawiałem się, czy istnieje obejście/naprawa?

Dzięki.

Odpowiedz

5

Wynika to z błędu mrówki; uniemożliwia użycie strumienia stdin z podprocesu, który uruchamia. Ale sztuczka telnet powinna działać, ponieważ polecenie lein repl uruchamia serwer replik gniazda; to działa dobrze tutaj.

+0

Dzięki, spróbuję, chociaż ten problem faktycznie ujawnia się w szlamie, mój post zawęził go do rep/swank, ale telnet nie zrobi dla mnie. Co ciekawe, ten problem nie występuje w ciastku. Cake (read-line) nie zawiesza się, zamiast tego zwraca z pustym ciągiem znaków. Czy mówisz, że mogę uruchomić lein swank, a kiedy dojdzie do (read-line) i bloków, mogę połączyć się przez telnet i chociaż użyć tego dla dowolnego stdin rzeczy, które będą następnie odzwierciedlone w repl/swank? –

+0

To bardzo dziwne; Nie rozumiem, jak telnet może się tak nie udać. Ale popchnąłem poprawkę do replikacji lein, a teraz read-line działa dla mnie w repl. Daj mi znać, czy to działa dla ciebie w najnowszym 1.4.0-SNAPSHOT; jeśli nie, proszę otworzyć problem lub rozpocząć wątek listy adresowej. – technomancy

2

Połącz się z REPL przez telnet.

$ 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=> 
+1

która tutaj nie działa, telnet localhost * port * nie wyświetla żadnego monitu o ponowne wyświetlenie. Próbowałem zarówno najnowsze wersje, jak i wersje rozwojowe. Jestem na OSX przy użyciu JSE 1.6, nie to ma znaczenia, ale tylko próbuję sprawdzić, czy mamy równoważne konfiguracje. –

+0

Ubuntu z jdk 1.6 tutaj. Sprawdź swój plik/etc/hosts. Czy localhost jest powiązany z 127.0.0.1? Czy poprawnie opracowałeś proces lein? Może spróbuj uruchomić lein i telnet na różnych oknach terminala? W przeciwnym razie zalecam wypróbowanie 'cake' (http://www.assembla.com/wiki/show/clojure/Getting_Started_with_Cake). –

1

Działa to dla mnie teraz: owinąć odczytu linia nazywa się makro z odczytane-line-wsparcie, które jest w ns swank.core [od Swank-clojure 1.4+ wierzę]:

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

Dzięki Tavis Judd za poprawkę.