Comment detail

指定コマンドを別プロセスで起動 (Nested Flatten)
Common LispでUNIXの外部コマンドを実行する方法は実装依存になります。
いくつか処理系の差異を吸収するラッパーがありますが、KMRCLの
command-outputが今回のお題にはぴったりな気がするので紹介してみます。

この関数はコマンドを引数として、実行結果を多値で返します。
内容は、(1)実行結果の標準出力、(2)エラーの場合、エラー出力、(3)リターンコード
となっています。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
(require :kmrcl)
;kmrcl:command-output実行例

;; 成功
(multiple-value-bind (out error code)
    (kmrcl:command-output "~A" "date")
  (format t "OUT:~A ~%ERROR: ~A~%STAT: ~D~%" out error code))
;=>
;OUT:2008年  1月 26日 土曜日 16:40:07 JST
; 
;ERROR: 
;STAT: 0

;; エラー
(multiple-value-bind (out error code)
    (kmrcl:command-output "~A" "foo")
  (format t "OUT:~A ~%ERROR: ~A~%STAT: ~D~%" out error code))
;=>
;OUT: 
;ERROR: /bin/sh: foo: not found
;
;STAT: 127

Index

Feed

Other

Link

Pathtraq

loading...