J'essaie de rediriger stdout vers un fichier de manière permanente, mais tous les exemples que je peux trouver à propos de cela impliquent de le faire dans un let ou dans un fichier open-open en utilisant la sortie standard global. Y at-il un moyen de faire une redirection large application?Rediriger définitivement stdout vers un fichier en Common Lisp (CCL)
EDIT: Voici comment j'ai essayé de faire la redirection avec la sortie standard:
(Setf *log* (open "/Users/Mike/Desktop/some.txt" :direction :output :if-exists :append))
(Setf *standard-output* *log*)
(print "Test")
Cette sortie arrête au REPL mais rien ne montre dans le fichier (qui n'existe et est vu par probe-file
) de l'appel d'impression.
EDIT: J'ai essayé d'utiliser la fonction Dribble:
(Dribble "/Users/Mike/Desktop/some.txt")
(format t "hello")
Mais je reçois l'erreur suivante:
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.
Est-ce que '(setf * standard-output * ...)' ne fonctionne pas? –
@JoshuaTaylor Oui, j'ai ajouté ce que j'ai essayé à mes questions. Il arrête la sortie au repel mais rien n'apparaît dans le fichier. – Mike2012
Um, cela ne montre rien qui devrait produire une sortie si. Quelles formes, après cela, ne produisent pas de sortie? Faites-vous quelque chose avec plusieurs threads? (Par exemple, si vous utilisez SLIME, vous utilisez peut-être plusieurs threads sans le savoir.) Vous pouvez uniquement définir \ * standard-output * sur \ * log * dans l'un de ces threads.) –