L'exécution de la ligne de commande commandes dans des scripts Ruby
Est-il un moyen pour exécuter la ligne de commande commandes par l'intermédiaire de Ruby? Je suis en train de créer un petit peu de Ruby programme de composer et de recevoir/envoyer par le biais de programmes en ligne de commande comme 'écran', 'rcsz", etc.
Ce serait génial si je pouvais lier tout cela avec Ruby (backend MySQL, etc.)
- Double Possible de l'Appel des commandes shell à partir de Ruby
Vous devez vous connecter pour publier un commentaire.
Oui. Il existe plusieurs manières:
un. Utilisation
%x
ou""':Ces méthodes sera de retour le stdout, et de rediriger stderr du programme.
b. Utilisation
system
:Cette méthode retourne
true
si la commande a réussi. Il redirige toutes les sorties du programme.c. Utilisation
exec
:Qui remplace le processus actuel avec celui créé par la commande.
d. (ruby 1.9) utilisation
spawn
:Cette méthode ne permet pas d'attendre que le processus de sortie et retourne le PID.
e. Utilisation
IO.popen
:Cette méthode retourne un
IO
objet reperesents le nouveau processus d'entrée/sortie. Il est aussi actuellement le seul moyen que je connaisse pour vous donner le programme de saisie.f. Utilisation
Open3
(sur 1.9.2 et plus tard)Open3
a plusieurs autres fonctions pour obtenir un accès explicite à deux flux de sortie. Il est similaire à popen, mais vous donne accès à stderr.io = IO.popen 'cat > out.log', 'r+'
; écrit la commande des sorties "out.journal"FileUtils
[ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html] ?Il y a un peu de moyens pour exécuter des commandes système en Ruby.
Mais si vous avez besoin d'effectuer d'entrée et de sortie avec la commande de stdin/stdout, vous aurez probablement envie de regarder le
IO::popen
méthode, qui offre notamment l'établissement.Oui, c'est certainement faisable, mais la méthode de la mise en œuvre diffère dépend de savoir si la "ligne de commande" programme en question fonctionne en "Plein écran" ou en mode ligne de commande. Les programmes écrits pour la ligne de commande ont tendance à lire STDIN et d'écrire sur la sortie standard STDOUT. Ceux-ci peuvent être appelés directement à l'intérieur de Ruby en utilisant le standard de backticks méthodes et/ou système/exec appels.
Si le programme fonctionne en mode "Plein Écran", comme l'écran ou vi, alors l'approche doit être différente. Pour ce genre de programmes que vous devriez regarder pour un Rubis de mise en œuvre de "s'attendre à" de la bibliothèque. Cela vous permettra de faire un script de ce que vous vous attendez à voir sur l'écran et ce à envoyer lorsque vous voyez l'un de ces chaînes apparaissent sur l'écran.
C'est rare d'être la meilleure approche, et vous devriez probablement regarder ce que vous essayez d'atteindre et trouver la bibliothèque en question/gem pour le faire plutôt que d'essayer d'automatiser un existant plein écran de l'application. Comme un exemple "Besoin d'aide avec le port série de communication en Ruby" traite avec le Port Série de communication, un pré-curseur à la numérotation, si c'est ce que vous voulez réaliser à l'aide de programmes spécifiques que vous avez mentionné.
La méthode la Plus Utilisée est l'Aide de
Open3
voici mon code version modifiée du code ci-dessus avec quelques corrections: