So starten Sie einen anderen Befehl in einem Ruby-Programm

So starten Sie einen anderen Befehl in einem Ruby-Programm. Schreibe hauptsächlich über popen

Methode 1: system () Funktion

Geben Sie den Befehl an die Funktion system () als Zeichenfolge. Das einfachste.

Beispiel 1 Keine Argumente

sys0.rb


system("ls")

Wenn du rennst

ruby sys0.rb

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

Beispiel 2 mit Argumenten

sys1.rb


system("ls *.txt")

Wenn du rennst

ruby sys1.rb

a.txt b.txt c.txt

Beispiel 3 Abrufen des Endstatus

Der Exit-Status (Exit-Status) kann mit $? Abgerufen werden

sys2.rb


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

Wenn du rennst

ruby sys2.rb

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

Es ist mit dem Exit-Status 2 fehlgeschlagen.

Methode 2 popen

Sie können die Ausgabe des ausgeführten Befehls abrufen und eingeben (untergeordneter Prozess). Kurz gesagt, Sie können in die Standardeingabe / -ausgabe lesen / schreiben.

Beispiel 1 Holen Sie sich das Ergebnis. Aus Standardausgabe lesen

popen0.rb


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

Wenn du rennst

ruby popen0.rb

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

Beispiel 2 Lesen / Schreiben in die Standardeingabe / -ausgabe

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

Wenn du rennst

ruby popen1.rb

Hello,

Methode 3 Gabel und Exec

Nur Beispiel 1 Gabel

fork0.rb


print "Start!\n"
child_pid = fork do
  #Nur untergeordnete Prozesse unten
  print "I am a child. pid=", Process.pid, "\n"
  sleep(1)
  #Es werden nur untergeordnete Prozesse ausgeführt
end
#Nur der übergeordnete Prozess unten
print "I am a parent. my pid=", Process.pid, ", my child's pid=", child_pid, "\n"
Process.waitpid(child_pid) #Warten Sie, bis der untergeordnete Prozess abgeschlossen ist

Wenn du rennst

ruby fork0.rb

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

Beispiel 2 Gabel und Exec

fork1.rb


print "Start!\n"
child_pid = fork do
  #Nur untergeordnete Prozesse unten
  exec("ls")
  #Es werden nur untergeordnete Prozesse ausgeführt
  #Wird unten nicht ausgeführt
  abc()
  #Wird nicht ausgeführt
end
#Nur der übergeordnete Prozess unten
print "I am a parent. my pid=", Process.pid, ", my child's pid=", child_pid, "\n"
Process.waitpid(child_pid) #Warten Sie, bis der untergeordnete Prozess abgeschlossen ist

Wenn du rennst

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

So starten Sie einen anderen Befehl in einem Ruby-Programm
Wie man in Ruby auf unbestimmte Zeit iteriert
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
So fügen Sie ein Video in Rails ein
So veröffentlichen Sie eine Bibliothek in jCenter
So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]
So zeigen Sie eine Webseite in Java an
So löschen Sie einen Controller usw. mit einem Befehl
So führen Sie eine djUnit-Aufgabe in Ant aus
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So erstellen Sie ein Thema in Liferay 7 / DXP
So implementieren Sie eine ähnliche Funktion in Rails
So erstellen Sie einfach ein Pulldown mit Rails
[Ruby] So generieren Sie eine zufällige Alphabet-Zeichenfolge
So erstellen Sie die einfachste Blockchain in Ruby
So implementieren Sie Paginierung in GraphQL (für Ruby)
So generieren Sie automatisch einen Konstruktor in Eclipse
So überprüfen Sie, ob eine Instanzvariable in einer Ruby-Klasse definiert ist
So starten Sie einen Index aus einer beliebigen Zahl in der iterativen Ruby-Verarbeitung
So löschen Sie alle Daten in einer bestimmten Tabelle
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
[Ruby] Verwendung der Standardausgabe bei der bedingten Verzweigung
So implementieren Sie eine nette Funktion in Ajax mit Rails
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
So erstellen Sie einen Daten-URI (base64) in Java
So zeigen Sie eine Browser-Vorschau mit VS-Code an
[So fügen Sie ein Video mit Rails in haml ein]
So schreiben Sie eine Datumsvergleichssuche in Rails
So verspotten Sie einen Super-Methodenaufruf in PowerMock
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
So konvertieren Sie eine Datei in ein Byte-Array in Java
[Rails 6] So legen Sie ein Hintergrundbild in Rails [CSS] fest
[Rails] So laden Sie JavaScript in einer bestimmten Ansicht
Wie schreibe ich einen Core Mod in Minecraft Forge 1.15.2
So starten Sie die Swagger-Benutzeroberfläche und den Swagger-Editor in Docker
So beheben Sie den SSL_connect-Fehler im PayPal Ruby SDK
Docker-Befehl zum Erstellen eines Rails-Projekts in einem einzigen Schlag in einer Umgebung ohne Ruby
Verwendung von Ruby return
Wie hinterlasse ich einen Kommentar?
[Ruby] Wie man auskommentiert
Multiplikation innerhalb eines Ruby-Arrays
Rbenv-Befehl zur Verwendung von Ruby
Ruby: Wie man Cookies benutzt
So schreiben Sie ein benutzerorientiertes Programm (1)
So fügen Sie ein Video ein
So erstellen Sie eine Methode
[Ruby] So teilen Sie jede GraphQL-Abfrage in Dateien auf
[Anfänger] Ich habe ein Programm zum Verkauf von Kuchen in Java erstellt
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel