要运行外部程序(如可移植的python进程),请参阅external-program。要更改当前的工作目录,请使用
cwd文件http://files.b9.com/lboot/utils.lisp中经过稍微修改的(公共领域)功能,该功能在下面复制。
(defun cwd (&optional dir) "Change directory and set default pathname" (cond ((not (null dir)) (when (and (typep dir 'logical-pathname)(translate-logical-pathname dir)) (setq dir (translate-logical-pathname dir))) (when (stringp dir) (setq dir (parse-namestring dir))) #+allegro (excl:chdir dir) #+clisp (#+lisp=cl ext:cd #-lisp=cl lisp:cd dir) #+(or cmu scl) (setf (ext:default-directory) dir) #+cormanlisp (ccl:set-current-directory dir) #+(and mcl (not openmcl)) (ccl:set-mac-default-directory dir) #+openmcl (ccl:cwd dir) #+gcl (si:chdir dir) #+lispworks (hcl:change-directory dir) #+sbcl (sb-posix:chdir dir) (setq cl:*default-pathname-defaults* dir)) (t (let ((dir #+allegro (excl:current-directory) #+clisp (#+lisp=cl ext:default-directory #-lisp=cl lisp:default-directory) #+(or cmu scl) (ext:default-directory) #+sbcl (sb-unix:posix-getcwd/) #+cormanlisp (ccl:get-current-directory) #+lispworks (hcl:get-working-directory) #+mcl (ccl:mac-default-directory) #-(or allegro clisp cmu scl cormanlisp mcl sbcl lispworks) (truename "."))) (when (stringp dir) (setq dir (parse-namestring dir))) dir))))
结合这两个功能,所需的代码是:
(cwd #p"../b/")(external-program:start "python" '("file.py") :output *pythins-stdout-stream* :input *pythons-stdin-stream*)(cwd #p"../a/")这将
cd到B,像运行by一样运行python进程
python file.py &,将python进程的stdin /
stdout发送到指定的流(
external-program有关更多详细信息,请参见文档),最后执行另一个
cwd将Lisp进程返回给A的操作。应该等到python进程完成后,使用
external-program:run代替
external-program:start。



