Comment démarrer une autre commande dans un programme Ruby.
Écrivez principalement sur popen
Donnez la commande à la fonction system () sous forme de chaîne de caractères. Le plus facile.
sys0.rb
system("ls")
Quand tu cours
ruby sys0.rb
a.txt b.txt c.txt sys0.rb sys1.rb sys2.rb
sys1.rb
system("ls *.txt")
Quand tu cours
ruby sys1.rb
a.txt b.txt c.txt
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.
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.
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
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,
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
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