Konsole¶
Einleitung¶
Neben Webanwendungen, lassen sich mit PHP und dem Alvine-Framework auch Anwendungen für die Konsole schreiben.
Konsolenanwendung¶
Eine Anwendung, die auf der Konsole ausgeführt werden soll, besitzt üblicherweise eine Klasse Main, die von der Klasse AlvineApplicationConsole abgeleitet ist.
Konsoleneingabe parsen¶
Alvine stellt für die Verarbeitung von Konsolenbefehlen einige hilfreiche Klassen zur Verfügung. Im folgenden Beispiel wird eine Befehl console.php mit den Argumenten match und run definiert.
$parser = new \Alvine\Application\Console\Parser();
try {
$parser
->add((new \Alvine\Application\Console\Argument('console.php'))->setRequired()->setPosition(0))
->add((new \Alvine\Application\Console\Argument('match'))->setRequired()->setPosition(1))
->add((new \Alvine\Application\Console\Argument('run'))->setRequired()
->setDescription('run führt etwas aus')
->add((new \Alvine\Application\Console\Option\Boolean('r', 'review'))
->setDescription('review the run')->setRequired(true)
->onMatch(function($obj, $v) {
// do something
}))
->onMatch(function($v) {
// do something
}))
->parse();
} catch(\Exception $e) {
print('EXCEPTION: '.$e->getMessage());
echo (string)(new \Alvine\Application\Console\Usage($parser,'console.php für die Befehle run und match aus.'));
}
Ausgabe auf der Konsole¶
Steuersequenzen¶
Mit Hilfe von Steuersequenzen lassen sich in Terminalfenster Farben, Positionen und Texte anpassen. Die Klassen des AlvineApplicationConsoleTerminal Paketes bieten hierzu einige Funktionen an.
// Zeilenumbruch
echo "\n\n";
echo "Hallo ".
\Alvine\Application\Console\Terminal\VT100\BackgroundColor::RED. // Hintergrundfarbe rot einschalten
' World '.
Alvine\Application\Console\Terminal\VT100\EscapeSequences::RESET.'!'; // Hintergrundfarbe ausschalten
// Zeilenumbruch
echo "\n";
Neben den vorgefertigten Steuersequenzen können auch beliebige Steuersequenzen angelegt werden.
// Sequenz für Unterstreichung
$underline = (string)new Alvine\Application\Console\Terminal\VT100\EscapeSequences(4);
echo "\n\n";
// Das Wort World unterstreichen
echo "HALLO ".$underline." World ". Alvine\Application\Console\Terminal\VT100\EscapeSequences::RESET;
echo "\n";
echo "\n";
Über Positions-Objekte lassen sich Texte im Terminalfenster beliebig positionieren.
// Bildschirm leeren
echo Alvine\Application\Console\Terminal\VT100\EscapeSequences::CLEAR;
// Positionen definieren
$position1 = new \Alvine\Application\Console\Terminal\VT100\Position(20, 40);
$position2 = new \Alvine\Application\Console\Terminal\VT100\Position(21, 43);
//Ausgabe von A,B und C
echo $position1.'A'.$position2.'B'.Alvine\Application\Console\Terminal\VT100\EscapeSequences::RESET.'C';
Terminal¶
Eine der weit verbreitetsten Terminalsysteme ist eine auf dem VT100 beruhender Standard. Alvine bietet mit den Klassen des AlvineApplicationConsoleTerminalVT100 eine einfache Untersützung an. Die Methoden der Terminal-Klasse schrieben die Befehle direkt in den Standard-Output und werden somit umgehend mit dem Aufruf wirksam.
// Bildschirm leeren
Referenzen¶
- http://en.wikipedia.org/wiki/ANSI_escape_code
- http://wiki.ubuntuusers.de/Bash/Prompt, Ändern des Eingabezeichens
- http://www.vt100.net/docs/vt510-rm/chapter4
- http://wiki.bash-hackers.org/scripting/terminalcodes
- http://www-user.tu-chemnitz.de/~heha/hs/terminal/terminal.htm#2, Terminal für Microcontroller