Common Lisp와 외부 명령줄 사이의 배관
3680 단어 pipecommonlispexternalprogram
(external-program:run "ls" '("-l") :output *standard-output*)
스트리밍(파이핑) 입력과 읽기 출력을 유지하려면 어떻게 합니까? (1) run 대신 start를 사용합니다.
(setf *x* (external-program:start "cat" '() :output :stream :input :stream))
(2) 출력을 읽기 위한 스레드를 만들고 인쇄합니다. Bordeaux-threads API는 POSIX와 매우 유사합니다.
(setf *read-thread*
(bordeaux-threads:make-thread
(lambda ()
(loop for line = (read-line (external-program:process-output-stream *x*) nil)
while line
do (format t "OUT: ~A~%" line)))
:name "titi"))
(3) 외부 프로그램에 데이터를 전달하기 위한 출력 스트림을 얻습니다.
(setf *out* (external-program:process-input-stream *x*))
(4) 나는 무엇인가를 쓰고 그것을 플래시한다.
(progn
(loop for i from 1 to 10
do (format *out* "!!! ~A~%" i))
(force-output *out*))
이 단계에서 다음과 같은 (2) 단계의 일부 출력이 표시되어야 합니다.
OUT: !!! 1
OUT: !!! 2
...
OUT: !!! 10
계속 가지고 놀 수 있습니다.
(5) 그리고 마지막으로 모든 것을 청소합니다.
(close *out*)
(bordeaux-threads:join-thread *read-thread*)
Reference
이 문제에 관하여(Common Lisp와 외부 명령줄 사이의 배관), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/veer66/piping-between-common-lisp-and-external-command-line-1hcl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)