我有一个基于Python的应用程序,可以在一个简单的read-eval-print循环中接受一些命令.我正在使用raw_input('> ')输入.在基于Unix的系统上,我还要import readline让事情变得更好.这一切都很好.
问题是有异步事件进入,我想尽快打印输出.不幸的是,这让事情看起来很难看.输出后,">"字符串不再显示,如果用户输入内容的一半,则会将文本切成两半.它可能应该在打印后重绘用户正在进行的文本.
这似乎必须是一个已解决的问题.这样做的正确方法是什么?
另请注意,我的一些用户是基于Windows的.
TIA
编辑:接受的答案在Unixy平台下工作(当readline模块可用时),但如果有人知道如何在Windows下工作,那将非常感谢!
写入(in-ns 'dbx)文件并加载它并不会更改repl的默认命名空间(使用cygwin/console).命名空间仍然是user=>,而不是dbx=>.
vikrant[28] clj
Clojure 1.3.0
user=> (load-file "try1.clj")
#(Namespace dbx)
user=>
Run Code Online (Sandbox Code Playgroud)
我们如何在脚本文件中定义的命名空间中启动REPL?
我想使用rlwrap和自定义的erlang repl.
如果我将它作为"rlwrap -a myrepl"运行它,它的工作原理非常好.
问题是myrepl有内置选项卡完成,它被rlwrap踩踏.
我想让rlwrap释放TAB键
如何在Scala repl中导入播放?
scala> import play.api.libs.json._
<console>:11: error: not found: value play
import play.api.libs.json._
Run Code Online (Sandbox Code Playgroud) 我还没有找到在网上使用Clojure REPL和Qt 的解决方案.基本上问题是,只要您调用QApplication/exec以便显示UI,REPL就会挂起.你不能将Cc Cc重新放回REPL,关闭活动的Qt窗口似乎会杀死整个Clojure进程.
现在只能在代理中调用QApplication/processEvents是不可能的,除非代理运行在您创建Qt小部件的完全相同的线程中.我花了两天时间搞清楚这一点,我看到其他人有同样的问题/问题,但没有解决方案.所以这是我的,在代码中:
(add-classpath "file:///usr/share/java/qtjambi.jar")
(ns qt4-demo
(:import (com.trolltech.qt.gui QApplication QPushButton QFont QFont$Weight)
(com.trolltech.qt.core QCoreApplication)
(java.util Timer TimerTask)
(java.util.concurrent ScheduledThreadPoolExecutor TimeUnit))
(:require swank.core))
(defn init []
(QApplication/initialize (make-array String 0)))
(def *gui-thread* (new java.util.concurrent.ScheduledThreadPoolExecutor 1))
(def *gui-update-task* nil)
(def *app* (ref nil))
(defn update-gui []
(println "Updating GUI")
(QApplication/processEvents))
(defn exec []
(.remove *gui-thread* update-gui)
(def *gui-update-task* (.scheduleAtFixedRate *gui-thread* update-gui 0 150 (. TimeUnit MILLISECONDS))))
(defn stop []
(.remove *gui-thread* update-gui)
(.cancel *gui-update-task*))
(defmacro qt4 [& …Run Code Online (Sandbox Code Playgroud) Clojure有大量的函数/宏来处理命名空间和java包导入.对于我的(有限的)理解,命名空间的设置可以在clojure过程中被视为状态(repl).
当在REPL会话中迭代地工作时,特别是当(重新)加载源文件时,我发现很容易混淆 - 通常当我在命名空间配置中出错或语法错误时.其他时候我想尝试重构命名空间/别名/引用过滤器,但不能在不重新启动REPL的情况下轻松退出现有的命名空间状态.
例如,我希望能够检查点命名空间配置 - 例如在repl上加载代码主体之后 - 然后在尝试在REPL导入的某些库之后返回到"clean-slate",这样我就可以立即测试一个源文件,该文件作为ns宏的一部分导入该库中已过滤的方法子集.
人们可以推荐保存和恢复命名空间配置的方法吗?
所以我一直在研究Clojure教程,到目前为止它非常有趣.不幸的是,每次我闭上了REPL时间,我失去所有的defn和def我在以前的会话创建.
因此,为了节省将来的时间,是否可以让Clojure REPL将我输入的所有内容保存到文件中,以便我可以挖掘出将来需要用的东西?
我想知道是否可以在远程计算机上运行Intellij的scala控制台进程.
问题
我正在我的本地计算机上开发一个scala应用程序,但它需要在远程计算机上运行.
我希望的是远程启动控制台进程(执行代码)并将IntelliJ中的控制台视图/编辑器连接到它 - 自然可以访问我正在开发的本地类.即,这是一个类似于远程启动进程然后连接调试器的设置.
一点背景
应用程序(基于Spark构建)需要与远程计算机位于同一网络的服务器进行大量讨论.在远程计算机上运行控制台进程将对端口/主机名/代理配置有很大帮助.它还可以提高性能,但这在这个问题上是次要的.
我有ssh访问远程机器,因此很容易设置代理/ ssh-tunnels.
希望你能帮忙:)
目前,Gradle的scala集成不提供REPL功能.如何使用适当的类路径从Gradle以符合人体工程学的方式运行Scala REPL?
当我使用 REPL 时,我有时需要查找函数的功能,例如splice. 我通常会访问文档网站。但我并不总是有互联网,如果我可以直接在 REPL 中编写help("splice")或某些内容(例如splice?)并查看结果,那就太好了。
然后我认为p6docRakudo Star 附带的可以使用,因为p6doc Array.splice在命令行上提供了文档。然后我在 REPL 中这样做:
> run <p6doc Array.splice>\n\nProc.new(in => IO::Pipe, out => IO::Pipe, err => IO::Pipe, exitcode => 1,\n signal => 0, pid => Nil, command => ("p6doc", "Array.splice"))\nRun Code Online (Sandbox Code Playgroud)\n:out但它有 exitcode 1。当我使用和捕获输出时:err,两者都是空字符串,但我不知道为什么。
有没有办法让 REPL 中的这种帮助功能与“run p6doc”或其他东西一起工作?
\n我使用 Windows10
\nWelcome to \xe2\x84\xa2 v2021.07.\nImplementing the \xe2\x84\xa2 programming language v6.d.\nBuilt on MoarVM version 2021.07.\nRun Code Online (Sandbox Code Playgroud)\n introspection code-documentation rakudo read-eval-print-loop raku