2009-01-28 7 views
14

Je viens d'apprendre les bases de Ruby après avoir été très heureux avec Python pendant plusieurs années (j'utilise encore Python pour certaines choses), mais j'aimerais savoir si il y a un idiome ou un hack pour résoudre ce problème particulier.Exécuter une bibliothèque Ruby à partir de la ligne de commande

J'ai un script Ruby que j'aimerais faire require script_name avec, mais j'aimerais aussi pouvoir exécuter ruby script_name.rb depuis le terminal et le faire fonctionner comme un script de ligne de commande. En Python cela serait fait en ayant la structure suivante au bas du script:

if __name__ == '__main__': 
    # do something here 

Cependant, je ne peux pas sembler trouver un équivalent en Ruby. Existe-t-il un moyen de détecter si le script en cours est exécuté à partir de la ligne de commande? Peut-être une méthode Kernel:: ou quelque chose? Idéalement, ce que je voudrais est quelque chose comme ceci au bas du script:

if from_command_line? 
    # do something here 
end 
+0

Vous devriez revoir les réponses ultérieures à votre question car elles incluent également du code qui réplique l'idiome de test de la classe python. – QueueHammer

Répondre

7

Vous pouvez trouver une fonctionnalité similaire dans ruby.

__FILE__ le nom du fichier source actuel.

$ 0 Contient le nom du script en cours d'exécution. Peut être assignable.

source: Ruby Quick Ref

22

Vous souhaitez utiliser:

if __FILE__ == $0 
    # do stuff 
end 

__FILE__ est le nom du fichier source et $0 est le nom du script en cours d'exécution.

5

Alors que

if __FILE__ == $0 
    Foo.run 
end 

est l'approche commune, je suis actuellement en utilisant

if File.identical?(__FILE__, $0) 
    Foo.run 
end 

parce que les programmes comme le rubis-prof can make $0 not equal__FILE__ même lorsque vous utilisez --replace-progname.

Questions connexes