stdout을 파일로 영구적으로 리디렉션하려고 시도하지만이 작업에 대해 찾을 수있는 모든 예제는 let 내부 또는 open file 표준 출력 글로벌을 사용합니다. 응용 프로그램을 리디렉션 할 수있는 방법이 있습니까?CCL (Common Lisp) 파일에 stdout을 영구적으로 리디렉션
편집 :
이(Setf *log* (open "/Users/Mike/Desktop/some.txt" :direction :output :if-exists :append))
(Setf *standard-output* *log*)
(print "Test")
이것은 REPL에 출력을 정지하지만, 아무것도 (존재 수행하고 probe-file
으로 볼 수있는 파일에 표시하지 : 여기에 내가 표준 출력 리디렉션을 수행하려고했습니다 어떻게)를 호출합니다.
편집 : 나는 드리블 기능을 사용하여 시도했다 :
(Dribble "/Users/Mike/Desktop/some.txt")
(format t "hello")
을하지만 다음과 같은 오류 얻을 :
Error: There is no applicable method for the generic function: #STANDARD-GENERIC-FUNCTION CCL::STREAM-SET-COLUMN #x30200006557F when called with arguments: (# 0) While executing: #, in process Listener(11). Type cmd-/ to continue, cmd-. to abort, cmd-\ for a list of available restarts. If continued: Try calling it again Type :? for other options.
'(setf * standard-output * ...)가 작동하지 않습니까? –
@JoshuaTaylor 예, 제 질문에 대한 답변을 추가했습니다. 그것은 반발에 대한 출력을 멈추지 만, 그 파일에 int는 나타나지 않습니다. – Mike2012
음, 출력을 생성해야하는 것은 표시되지 않습니다. 그렇게 한 후에 출력물을 생산하지 않는 것은 무엇입니까? 여러 스레드로 작업하고 있습니까? (예를 들어, SLIME을 쓰고 있다면 다중 쓰레드를 사용하지 않고서도 쓰레드 중 하나에서 \ * 표준 출력 *을 \ * log *으로 만 설정할 수 있습니다.) –