2017-02-09 4 views
0

Je voudrais non seulement capturer la sortie d'une commande comme avecComment retourner l'état de sortie et la sortie des commandes du système Racket?

(with-output-to-string (lambda() (system "ls -la"))) 

Mais aussi voudrait être en mesure d'accéder au code de sortie, de sorte que je n'ai pas pour analyser la sortie de savoir si la commande a réussi ou non et peut réagir en conséquence.

Comment puis-je faire cela Racket?

Je trouve la documentation sur subprocess, mais je ne sais pas comment fournir tous les arguments comme la sortie standard. Je voudrais voir exemple complet, dans lequel la sortie est utilisée si la commande a réussi et si la commande a échoué, il devrait y avoir une certaine réaction au code de sortie.

Répondre

1

Racket fournit une procédure system/exit-code, qui est similaire à system mais renvoie le code de sortie au lieu d'un indicateur de réussite booléen. Il se comporte autrement exactement comme system. En disant cela, si tout ce que vous devez savoir est de savoir si la commande s'est exécutée correctement et si elle n'a pas besoin du code de sortie lui-même, system est en fait suffisant. Comme le dit la documentation, il retourne vrai si réussi et faux sinon.

Par exemple:

(with-output-to-string 
    (lambda() 
    (unless (system "ls -la") 
     ;; handle error here 
    ))) 
+0

Cela fait beaucoup de sens et il répond à ma question déjà. Je voudrais imprimer la sortie de ma commande en cas d'erreur (et imprimer quelque chose de mon choix quand il réussit), comment pourrais-je obtenir la sortie à l'intérieur du formulaire 'unless'? – Zelphir