CAPTURE erreurs « command not found » de Ruby les accents graves?
-
24-10-2019 - |
Question
Y at-il un moyen de capturer une erreur « command not found » dans un script Ruby? Par exemple, étant donné:
output = `foo`
Comment puis-je piéger la situation où foo
n'est pas installé? Je pensais que je pouvais rescue
une exception, mais cela ne semble pas fonctionner sur 1.8.7. Y at-il une autre façon d'appeler le sous-processus qui fera ce que je veux? Ou est-il une approche différente?
Mise à jour
Mes excuses, j'oublié de mentionner une exigence cachée: Je préférerais que l'interprète ne fuit pas la ligne de commande à l'utilisateur (il peut contenir des données sensibles), donc pourquoi l'exception méthode de capture est préférée. Toutes mes excuses pour en sortir ce la première fois.
La solution
Utilisez le code de retour!
irb(main):001:0> `date`
=> "Mo 24. Jan 16:07:15 CET 2011\n"
irb(main):002:0> $?
=> #<Process::Status: pid=11556,exited(0)>
irb(main):003:0> $?.to_i
=> 0
irb(main):004:0> `foo`
(irb):4: command not found: foo
=> ""
irb(main):005:0> $?.to_i
=> 32512
http://corelib.rubyonrails.org/classes/Process/Status.html
Rediriger STDERR à STDOUT vous donnera la sortie en tant que valeur de retour au lieu de ballonnements, il vient de sortir:
irb(main):010:0> `foo 2>&1`
=> "sh: foo: not found\n"
irb(main):011:0> $?.to_i
=> 32512