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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top