2017-06-09 8 views
1

私はinferior-shell:runを使用して、日常的に失敗する長期実行タスクをビルドします(これはビルド検証ルーチンです)。下位シェルライブプリント出力

私の主な問題は、起動したアクティビティの「ライブ」出力を見る方法を見つけることができなかったことです。

ライブフィードが必要なのは、エラーが発生した場合に出力が表示されないためです。私はON-ERROR:の鍵を調べましたが、終了コードが1であるというだけではありません。これは、この鍵が何らかの回復処置をとるためのコールバックであるように思われます。しかし、私の仕事が失敗した場合、なぜ失敗したのか知りたいのですが、それはコマンドの出力には隠されています。

私はこのようなRUNを呼び出してみました:

(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 

でも成功の場合には、まだそれが生産されていますように、出力を見るために良いこと(代わりの終わりに)それだけで素敵な-にありますでしょう-持ってる。

私はちょうどLispを学び始めたばかりなので、明らかに何かが間に合わなかったら謝ります。

私はsbcl

答えて

1

quickloadinferior-shellinferior-shell:runの説明文字列を見てみましょロードしています。 outputerror-output:stringに設定することができます。つまり、それぞれ1番目と2番目の戻り値になります。 3番目の戻り値は終了コードです。これらの値はmultiple-value-bindでバインドできます。 :on-errornilの場合、ゼロ以外の終了コードの場合はエラーは通知されません。

例:それが実行されている間、ライブ出力、コマンドの出力:

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

私は彼が別の何かを望んでいると思います。 –

+0

私はその部分を「持っていい」と解釈しました(3番目から最後の段落まで)。通常、ビルドの出力を解析するためには必要ありません。 – Svante

+0

申し訳ありませんが、誤って2つの質問を1つにして、タイトルを更新して優先度を反映しませんでした。私は 'error-output'キーをテストし、それがうまくいけば答えを受け取ります! –

関連する問題