2017-06-09 4 views
1

Ich verwende inferior-shell:run, um eine lang andauernde Aufgabe zu starten, die routinemäßig fehlschlagen kann (es ist eine Build-Validierungsroutine).Inferior-Shell Live-Druckausgabe

Mein Hauptproblem ist, dass ich keinen Weg finden konnte, die "Live" -Ausgabe der gestarteten Aktivität zu sehen.

Der Grund, warum ich eine Live-Feed möchte, ist, weil ich die Ausgabe nicht sehen konnte, wenn ein Fehler aufgetreten ist; Ich schaute in den Schlüssel ON-ERROR:, aber es ergab wenig mehr als zu sagen, dass es einen Exit-Code von 1 gab. Dies macht Sinn, da es scheint, dass dieser Schlüssel ein Callback ist, um irgendeine Art von Recovery-Aktion zu machen. Wenn meine Aufgabe jedoch fehlschlägt, möchte ich auch wissen, warum sie fehlgeschlagen ist, und das ist in der Ausgabe des Befehls verborgen, die anscheinend nicht zugänglich ist.

Ich versuchte RUN wie dieser Aufruf:

(inferior-shell:run 
    (pod-command file)  ; this generates a string shell 
           ; command from the arg FILE 
    :on-error #'print   ; tells me that the exit code was 1 
    :output *standard-output* ; default, if I understand correctly 
    :interactive t)   ; this was a shot in the dark 

Selbst im Erfolgsfall wäre es immer noch schön sein Ausgang zu sehen, wie sie (statt am Ende) produziert werden wird aber das ist nur ein nice-to -haben.

Ich fange gerade erst an, Lisp zu lernen, also entschuldige ich mich, wenn ich etwas Offensichtliches verpasst habe.

I inferior-shell mit quickload in sbcl

Antwort

1

Werfen Sie einen Blick in die Dokumentation Kette inferior-shell:run bin Laden. Sie können sowohl output als auch error-output auf :string setzen, was bedeutet, dass sie der erste bzw. der zweite Rückgabewert sind. Der dritte Rückgabewert ist der Beendigungscode. Sie können diese Werte mit multiple-value-bind binden. Wenn :on-errornil ist, wird im Falle eines Nicht-Null-Beendigungscodes kein Fehler gemeldet.

Beispiel:

CL-USER> (inferior-shell:run "git status" 
          :on-error nil 
          :error-output :string 
          :output :string) 
"" 
"fatal: Not a git repository (or any of the parent directories): .git 
" 
128 
+1

Ich glaube, er will etwas anderes: Live-Ausgabe, Ausgabe des Befehls, während er ausgeführt wird. –

+0

Ich interpretierte diesen Teil als "nett zu haben" (dritter bis letzter Absatz). Es ist normalerweise nicht notwendig, die Ausgabe eines Builds zu analysieren. – Svante

+0

Es tut mir leid, ich habe versehentlich zwei Fragen in einem und nicht den Titel aktualisiert, um die Priorität zu reflektieren. Ich werde den 'error-output'-Schlüssel testen und dann die Antwort akzeptieren, wenn das funktioniert! –