RUN-PROGRAM
으로 시작하는 프로그램의 출력 스트림을 사용하는 방법을 알아 내려고 노력 중이므로 RUN-PROGRAM
으로 시작된 다른 프로그램 (즉, 도덕적이며 아마도 파이프에 상응하는 것)의 입력으로 사용할 수 있습니다. 나는 :INPUT
, :OUTPUT
및 :WAIT
키워드 인수의 조합을 사용하여 시도했지만, 에 대한 결과는 지금까지 생산적이었습니다. 모든 팁이 도움이 될 것입니다. 예를 들어 쉘에서 ls | grep lisp
과 같은 작업을 수행하려면 어떻게해야합니까? 내 시도Steel Bank Common Lisp에서 입력 및 출력 스트림을 처리하는 방법은 무엇입니까?
하나는 점액 REPL이 실행
(defun piping-test()
(let ((grep-process (run-program "/usr/bin/grep" '("lisp")
:input :stream
:output :stream)))
(unwind-protect
(with-open-stream (s (process-input grep-process))
(let ((ls-process (run-program "/bin/ls" '()
:output s)))
(when ls-process
(unwind-protect
(with-open-stream (o (process-output grep-process))
(loop
:for line := (read-line o nil nil)
:while line
:collect line))
(process-close ls-process)))))
(when grep-process (process-close grep-process)))))
은 꽤 분명 옳은 일이 아니다 그래서 내가 C-c C-c
와 을 깰 때까지 걸어 모든 원인,하지만 난 방법을 잘 을하지 않아요 그것을 바꿔서 그것이 옳은 것입니다.
편집 : 모두 RUN-PROGRAM
호출에 :WAIT NIL
추가 또는 grep
만 호출로, 트릭을하지 않습니다. 이 경우 함수가 중단되고 C-c C-c
으로 중단되면 SB-UNIX:SELECT
이라는 로컬 함수 (FLET
을 통해 정의 됨)가 중지되었음을 나타내는 스택 추적을 가져옵니다.