Comment lancer une autre commande dans un programme Ruby

Comment démarrer une autre commande dans un programme Ruby. Écrivez principalement sur popen

Méthode 1: fonction system ()

Donnez la commande à la fonction system () sous forme de chaîne de caractères. Le plus facile.

Exemple 1 Aucun argument

sys0.rb


system("ls")

Quand tu cours

ruby sys0.rb

a.txt b.txt c.txt sys0.rb sys1.rb sys2.rb

Exemple 2 avec arguments

sys1.rb


system("ls *.txt")

Quand tu cours

ruby sys1.rb

a.txt b.txt c.txt

Exemple 3 Obtention du statut de fin

Le statut de sortie (statut de sortie) peut être obtenu avec $?

sys2.rb


system("ls abc")
print $?, "\n"

Quand tu cours

ruby sys2.rb

ls: cannot access abc: No such file or directory pid 13715 exit 2

ls a échoué avec l'état de sortie 2.

Méthode 2 popen

Vous pouvez obtenir et entrer la sortie de la commande exécutée (processus enfant). En bref, vous pouvez lire / écrire sur une entrée / sortie standard.

Exemple 1 Obtenez le résultat. Lire à partir de la sortie standard

popen0.rb


IO.popen("ls","r") do | io |
        while io.gets do
                print
        end
end

Quand tu cours

ruby popen0.rb

a.txt b.txt c.txt popen0.rb sys0.rb sys1.rb sys2.rb

Exemple 2 lecture / écriture sur entrée / sortie standard

popen1.rb


IO.popen("grep e","r+") do | io |
        io.print "Hello,\n"
        io.print "World!\n"
        io.close_write
        while io.gets do
                print
        end
end

Quand tu cours

ruby popen1.rb

Hello,

Méthode 3 fourche et exécutable

Exemple 1 fourche uniquement

fork0.rb


print "Start!\n"
child_pid = fork do
  #Seuls les processus enfants ci-dessous
  print "I am a child. pid=", Process.pid, "\n"
  sleep(1)
  #Seuls les processus enfants s'exécutent
end
#Seul le processus parent ci-dessous
print "I am a parent. my pid=", Process.pid, ", my child's pid=", child_pid, "\n"
Process.waitpid(child_pid) #Attendez que le processus enfant se termine

Quand tu cours

ruby fork0.rb

Start! I am a parent. my pid=25527, my child's pid=25529 I am a child. pid=25529

Exemple 2 fork et exec

fork1.rb


print "Start!\n"
child_pid = fork do
  #Seuls les processus enfants ci-dessous
  exec("ls")
  #Seuls les processus enfants s'exécutent
  #Non exécuté ci-dessous
  abc()
  #Ne sera pas exécuté
end
#Seul le processus parent ci-dessous
print "I am a parent. my pid=", Process.pid, ", my child's pid=", child_pid, "\n"
Process.waitpid(child_pid) #Attendez que le processus enfant se termine

Quand tu cours

ruby fork1.rb

Start! I am a parent. my pid=25801, my child's pid=25803 a.txt b.txt c.txt fork0.rb fork1.rb popen0.rb popen1.rb sys0.rb sys1.rb sys2.rb

Recommended Posts

Comment lancer une autre commande dans un programme Ruby
Comment itérer indéfiniment en Ruby
Comment changer une chaîne dans un tableau en un nombre dans Ruby
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Comment insérer une vidéo dans Rails
Comment publier une bibliothèque dans jCenter
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
Comment afficher une page Web en Java
Comment supprimer un contrôleur, etc. à l'aide d'une commande
Comment exécuter une tâche djUnit dans Ant
Comment ajouter un chemin de classe dans Spring Boot
Comment créer un thème dans Liferay 7 / DXP
Comment implémenter une fonctionnalité similaire dans Rails
Comment créer facilement un pull-down avec des rails
[Ruby] Comment générer une chaîne de caractères d'alphabet aléatoire
Comment créer la blockchain la plus simple de Ruby
Comment implémenter la pagination dans GraphQL (pour ruby)
Comment générer automatiquement un constructeur dans Eclipse
Comment vérifier si une variable d'instance est définie dans une classe Ruby
Comment démarrer un indice à partir d'un nombre arbitraire dans le traitement itératif Ruby
Comment effacer toutes les données d'une table particulière
Comment créer un environnement Java en seulement 3 secondes
[Ruby] Comment utiliser la sortie standard dans le branchement conditionnel
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
[Ruby on Rails] Comment écrire enum en japonais
Comment créer un projet Spring Boot dans IntelliJ
Comment créer un URI de données (base64) en Java
Comment afficher un aperçu du navigateur avec VS Code
[Comment insérer une vidéo dans un hameau avec Rails]
Comment écrire une recherche de comparaison de dates dans Rails
Comment se moquer d'un appel de super méthode dans PowerMock
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Comment convertir un fichier en tableau d'octets en Java
[Rails 6] Comment définir une image d'arrière-plan dans Rails [CSS]
[Rails] Comment charger JavaScript dans une vue spécifique
Comment écrire un mod de base dans Minecraft Forge 1.15.2
Comment lancer Swagger UI et Swagger Editor dans Docker
Comment résoudre l'erreur SSL_connect dans le SDK PayPal Ruby
Commande Docker pour créer un projet Rails avec un seul coup dans l'environnement sans Ruby
Comment utiliser le retour Ruby
Comment laisser un commentaire
[Ruby] Comment commenter
Multiplication dans un tableau Ruby
Commande Rbenv pour utiliser Ruby
Ruby: Comment utiliser les cookies
Pour écrire un programme orienté utilisateur (1)
Comment insérer une vidéo
Comment créer une méthode
[Ruby] Comment diviser chaque requête GraphQL en fichiers
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Comment créer une partie d'espace réservé à utiliser dans la clause IN