0%

Die nötigen Grundlagen der Kommandozeile · Übung

Dein eigenes Programm ausführen

Auf diese Lektion hat das ganze Kapitel hingearbeitet.

python ist ein Programm wie jedes andere. Das Terminal führt es genauso aus wie alles andere: über seinen Namen. Gib ihm einen Dateinamen, und es führt diese Datei aus:

python report.py
You have read 3 books.
- The Left Hand of Darkness
- Piranesi
- Station Eleven

Das ist die report.py in deinem Projekt, die dir ls seit der zweiten Lektion anzeigt. Du musstest sie weder in eine andere Ausführungsumgebung kopieren noch vorher einreichen. Die Shell hat Python gestartet und ihm report.py als Argument übergeben. Python hat diese Datei relativ zum Arbeitsverzeichnis geöffnet und ihren Quellcode ausgeführt.

Wo nach dem Dateinamen gesucht wird

report.py ist ein relativer Pfad und wird deshalb vom Arbeitsverzeichnis aus gesucht, nach derselben Regel wie bei ls und cat. Wenn du in data stehst und python report.py eingibst, sagt Python, dass es die Datei nicht finden kann. Von dort aus kann es das tatsächlich nicht.

Das ist einer der häufigsten Gründe, warum ein erstes Skript nicht startet. Das Problem liegt nicht innerhalb der Python-Datei.

Ausgabe an einen anderen Ort als den Bildschirm senden

Standardmäßig geht die Ausgabe eines Programms an dein Terminal. > sendet sie stattdessen in eine Datei. Wir legen sie in dem Verzeichnis notes ab, das du in der vorherigen Lektion erstellt hast:

python report.py > notes/summary.txt

Prüfe mit ls, ob notes tatsächlich da ist. Falls nicht, hast du entweder die vorherige Lektion übersprungen oder das Projekt zurückgesetzt. Mit mkdir notes legst du es wieder an.

Eine Sache über Verzeichnisse solltest du wissen, bevor du diese Umleitung ausführst. Sie erklärt die meisten verwirrenden Ergebnisse an dieser Stelle.

> erstellt die Datei, auf die es zeigt, aber niemals ein Verzeichnis dafür. Wenn du in ein nicht vorhandenes Verzeichnis umleitest, bricht die Shell mit No such file or directory ab und nennt den Pfad, den sie nicht öffnen konnte. Diese Meldung bezieht sich auf den Ordner, nicht auf dein Programm.

Wenn die Umleitung funktioniert, erscheint keine Ausgabe. Das ist richtig: Die Ausgabe ist in die Datei gegangen. Mit cat notes/summary.txt siehst du, dass sie angekommen ist.

Das funktioniert mit jedem Befehl, nicht nur mit Python. echo gibt einfach das aus, was du ihm übergibst. Damit lässt sich die Umleitung am kürzesten für sich allein beobachten:

echo hello > /tmp/pip-redirect-demo.txt
cat /tmp/pip-redirect-demo.txt

Noch zwei Dinge über >, bevor du dich darauf verlässt: Es erstellt die Datei, wenn sie nicht existiert, und ersetzt ihren Inhalt ohne Nachfrage, wenn sie bereits existiert. Außerdem erledigt das die Shell, nicht Python: Dein Programm gibt weiterhin nur etwas aus, und die Shell entscheidet, wo diese Ausgabe landet. Deshalb funktioniert dieselbe Umleitung mit vielen Befehlen.

Eine Datei bearbeiten, ohne das Terminal zu verlassen

Um report.py zu ändern, brauchst du einen Editor. Im Terminal von Python Land ist einer enthalten. nano öffnet eine Datei direkt an deinem aktuellen Standort zur Bearbeitung:

nano report.py

Die Datei füllt den Bildschirm, und mit den Pfeiltasten kannst du dich darin bewegen. Unten zeigt nano seine Befehle an. Dabei steht ^ für die Control-Taste:

  • Ctrl + O schreibt die Datei. Du wirst gebeten, den Namen zu bestätigen; drücke Enter.

  • Ctrl + X beendet nano und bringt dich zur Eingabeaufforderung zurück.

Speichere und beende dann den Editor. Mehr brauchst du heute nicht.

nano ist nicht der Editor, den du für deine eigentliche Arbeit verwenden wirst; Kapitel 4 installiert einen dafür. Er ist hier enthalten, weil du eines Tages eine Datei über ein Terminal auf einem Computer bearbeiten musst, auf dem nichts anderes verfügbar ist. Außerdem ist er der kürzeste Weg von „Ich kann Dateien ansehen“ zu „Ich kann sie verändern“.

Jetzt bist du dran

  1. Führe ls aus. Wenn es notes nicht anzeigt, führe mkdir notes aus.

  2. Öffne report.py mit nano und füge "The Dispossessed" zur Liste books hinzu. Speichere mit Ctrl + O und beende dann mit Ctrl + X.

  3. Führe python report.py aus und prüfe, ob die Ausgabe vier Bücher meldet und dein hinzugefügtes Buch auflistet.

  4. Führe es erneut aus und leite die Ausgabe nach notes/summary.txt um.

  5. Prüfe mit cat notes/summary.txt, ob sie angekommen ist.

Drücke dann Check my work. Tue das nach Schritt 5, nicht nach Schritt 1: Solange die Datei nicht existiert, gibt es nichts Gespeichertes, das die Prüfung finden kann.

Wenn Schritt 3 weiterhin drei Bücher ausgibt, schaue mit cat report.py nach: Enthält die gespeicherte Liste books alle vier Titel? Prüfe den hinzugefügten Titel und speichere mit Ctrl + O, dann Enter. Wenn die gespeicherte Datei richtig aussieht, prüfe mit pwd, ob du die gewünschte Projektkopie ausführst. Python liest die Quelldatei bei jedem Aufruf erneut.

Wenn Schritt 4 No such file or directory meldet, lies nach, welcher Pfad genannt wird. Bash nennt notes/summary.txt; ein fehlendes Verzeichnis notes verhindert, dass diese Datei erstellt werden kann. Gehe zu Schritt 1 zurück und kehre danach direkt zu Schritt 4 zurück.

Du führst python report.py > notes/summary.txt aus, und auf dem Bildschirm erscheint nichts. Was ist passiert?