CommonLisp (SBCL) で ningle を試してみる & 外部コマンドの実行
Commonlisp のお勉強。
今日はDockerコンテナ上で ningle を起動してみます。
前準備
docker run -d -p :22 -p :5000 moremagic/comon-lisp-study apt-get update && apt-get install -y gcc
vi ningle.lisp
(ql:quickload :clack) (ql:quickload :ningle) (defvar *app* (make-instance 'ningle:<app>)) (setf (ningle:route *app* "/") "Welcome to ningle!") (setf (ningle:route *app* "/login" :method :POST) #'(lambda (params) (if (authorize (cdr (assoc "username" params :test #'string=)) (cdr (assoc "password" params :test #'string=))) "Authorized!" "Failed...Try again."))) (clack:clackup *app*)
起動
以下コマンドで 5000 でWebサーバがリッスンします。
sbcl --load ningel.lisp
終了するときは (exit) で抜けます。
外部コマンド
SBCLで外部コマンドの呼び出し はこうやるそうです
CL-USER(1): (sb-ext:run-program "/bin/date" nil :output t) Sun Jul 3 03:38:58 UTC 2016 #<SB-IMPL::PROCESS :EXITED 0>
hello world にこれ入れてみてもダメだった。
さてどやるか調べてみようっと。
※追記
こうやるらしい
(with-output-to-string (out) (sb-ext:run-program "/bin/ls" '("/") :output out))
fmfm なるほど!
関数化しておこう
(defun call-cmd (lat) (with-output-to-string (out) (sb-ext:run-program (car lat) (cdr lat) :output out))) (call-cmd '("/bin/uname" "-a")) "Linux b0f364e72845 3.19.0-37-generic #42-Ubuntu SMP Fri Nov 20 18:22:05 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux "
できた!
■参考
http://8arrow.org/ningle/
http://d.hatena.ne.jp/zalawcc/20090201/1233487237
http://lambdasakura.hatenablog.com/entry/20100115/1263786768
moremagic
2016-07-03