3

在 python 中工作时,repl我经常需要编辑多行代码。

所以我import os当时用os.system("notepad npad.py")

在clojure中,我首先运行(use '[clojure.java.shell :only [sh]])

然后我跑(sh "notepad" "jpad.clj")

这会启动记事本,但不是有用的方式,因为 clojurerepl现在挂起。换句话说,在我关闭记事本之前,我无法在其中输入代码,repl并且我想保持两者都打开。

我知道我可以轻松打开记事本而无需使用clojure,所以没什么大不了的。但是,clojure 有没有办法在不挂起的情况下启动外部进程?

4

2 回答 2

5

future是一种让工作在后台运行的便捷方式,并且以后可以轻松检查进程。

user> (def notepad-process (future (sh "emacs" "jpad.clj")))
#'user/notepad-process

编辑该文件一段时间,如果需要退出代码,请稍后检查该过程:

user> @notepad-process
{:exit 0, :out "", :err ""} 
于 2013-02-21T19:46:35.103 回答
1

听起来您想sh立即返回而不是等待记事本的退出代码。编写一个在新线程上sh!运行原始命令的宏或类似的东西怎么样?sh如果您只是在 REPL 中使用它作为一种便利,那将是完全没有问题的。

编辑

亚瑟的答案更好,更符合 Clojurian - 去吧。

于 2013-02-21T19:36:26.007 回答