|
Du bist hier:
Hinterkattentuffel -
Ruby -
Externe Programme starten Prev: Windows virtuelles Dateisystem |
|
Es gibt eine Reihe von Möglichkeiten, von Ruby aus externe Programme auszuführen. Ich nutze dieses Feature z. B., um an sich unfertige Ruby-Programme schnell einer ersten Benutzung zuzuführen. Ruby hat das Potential, für mich Tasks zu erledigen, die ich früher über die Bash, Unix-Filter, Awk, Perl oder gar in C realisiert hätte. Bis man als Ruby-Experte im Grunde alles nur noch in Ruby erledigt, dauert es jedoch eine Weile und da ist es pragmatisch, das gewohnte Handwerkszeug nicht von heute auf morgen über Bord zu werfen. Und auch in der Windows-Familie gibt es Tools, deren Einsatz für den Anfang Arbeit spart: IRB> system 'find /?' Sucht in einer oder mehreren Dateien nach einer Zeichenfolge. ... => trueDer Fehlercode landet in $?.
IRB> system 'bla'; puts "Fehlercode[ #{$?}]"
Fehlercode[ -1]
=> nil
Will man gleichzeitig aus dem Ruby-Pogramm aussteigen, verwendet man exec. Ein Beispiel liefert ri exec. Kniffliger wird's, wenn der Output des Programms in Ruby verwendet werden soll. Im Prinzip leisten das Backquotes, aber im Gegensatz zu "system" funktionieren Backquotes nicht für DOS-Kommandos, also Programme mit der Endung .COM, etwa das Kommando tree. Hierbei muss dann der Kommandointerpreter vorgeschaltet werden: IRB:> tmp = `cmd /c tree`; puts tmp Auflistung der Ordnerpfade für Datenträger FESTPLATTE ... => nil Damit der Fehleroutput auch über die Standardausgabe läuft und dann in der Variable landet, muss man ihn umleiten:
IRB:> tmp = `cd xxx`; puts "[#{tmp}]"
Das System kann den angegebenen Pfad nicht finden.
[]
=> nil
IRB> tmp = `cd xxx 2>&1`; puts "[#{tmp}]"
[Das System kann den angegebenen Pfad nicht finden.
]
=> nil
Wer noch mehr Kontrolle benötigt, sollte sich mit Pipes beschäftigen. Im simpelsten Fall bieten sie ähnliche Funktionalität wie system und Backquotes, aber Pipes können auch bidirektionale Kommunikation etablieren. Einen ersten Überblick liefert CMD:>ri IO#popen Eine mögliche Verwendung von Pipes demonstriert auch das in der Installation enthaltene Beispielprogramm C:\ruby\samples\FXRuby\inputs.rbw. |
| Next: Bloecke |