12

clisp では、次のコードが機能します。

(defun hit-history () (shell "tail ssqHitNum.txt"))

ただし、Clozure CL では、このshell関数はサポートされていません。

4

6 に答える 6

10

いいえ、標準的な方法はありませんが、重要な実装にこの機能を提供するライブラリがあります。たとえば、Quicklispで利用可能なtrivial-shellがあります。これはを提供しますshell-command。(実際にはテストしていませんが、CLikiで推奨されているライブラリの1つです。)外部プログラムもあります。更新:Ehvinceがコメントと彼自身の答えで指摘しているように、最近は劣ったシェルが好まれているようです。

また、読み取り時の条件を使用して、さまざまな実装でそれぞれの機能を使用してこれを行うこともできます。

CCLにはccl:run-program、たとえば次のものがあります。

CL-USER> (run-program "whoami" '() :output *standard-output*)
foobar
#<EXTERNAL-PROCESS (whoami)[NIL] (EXITED : 0) #xC695EA6>
于 2011-10-11T04:24:09.197 に答える
8

はい、ASDFの一部である UIOP を使用して、最新のすべての実装に含める必要があります。

  • 同期コマンド:uiop:run-program
  • 非同期コマンド:uiop:launch-program

たとえば

(uiop:run-program (list "firefox" "http:url") :output t)

また

(defparameter *shell* (uiop:launch-program "bash" :input :stream :output :stream))

入力を送信し、出力を読み取ることができます。

ここで詳しく説明されています:  https://lispcookbook.github.io/cl-cookbook/os.html#running-external-programs

trivial-shellは非推奨であり、ポータブルuiopの(同期) を内部的に使用する Inferior -shellに置き換えられているため、そのまま使用できます。run-program

于 2016-12-26T21:26:39.727 に答える
2
(defun dot->png (fname thunk)
   (with-open-file (*standard-output*
       fname
       :direction :output
       :if-exists :superseded)
     (funcall thunk))
   (ccl:run-program "dot" (list "-Tpng -O" fname))
)

Lisp p123の土地を研究するとき、ccl(clozure)で成功を実行します

于 2012-08-12T00:33:43.390 に答える
1

以下は、common lisp 内から wget を呼び出す例を示しています。

https://diasp.eu/posts/1742240

コードは次のとおりです。

(sb-ext:run-program "/usr/bin/wget" '("-O" "<path-to-output-file>" "<url-link>") :output *standard-output*) 
于 2014-04-09T22:00:08.290 に答える