Shell-Befehle in IPython#

IPython Notebooks ermöglichen die Ausführung einfacher UNIX/Linux-Befehle in einer Eingabezelle. Es gibt keine Einschränkungen, aber denkt bitte daran, dass ihr im Gegensatz zu einer normalen UNIX/Linux-Shell jeden Shell-Befehl ! voranstellen müsst, zum Beispiel !lsfür den Befehl ls (weitere Erläuterungen zum Befehl folgen weiter unten). Außerdem wird jeder Shell-Befehl in einer eigenen Subshell ausgeführt. Aus diesem Grund stehen Euch die Ergebnisse früherer Shell-Befehle nicht zur Verfügung.

Zunächst listet der Befehl ls die Dateien im aktuellen Arbeitsverzeichnis auf. Die Ausgabe wird unter der Eingabezelle angezeigt und listet eine einzelne Dateishell.ipynb auf:

[1]:
!ls
debugging.ipynb                 myscript.py
display.ipynb                   shell.ipynb
examples.ipynb                  start.rst
extensions.rst                  tab-completion-for-anything.png
importing.ipynb                 tab-completion-for-modules.png
index.rst                       tab-completion-for-objects.png
magics.ipynb                    unix-shell
mypackage

Der Befehl !pwd zeigt den Pfad zum Arbeitsverzeichnis (engl: path to the working directory) an:

[2]:
!pwd
/Users/veit/cusy/trn/Python4DataScience-de/docs/workspace/ipython

Der Befehl !echo gibt Text aus, der dem echo-Befehl als Parameter übergeben wurde. Das folgende Beispiel zeigt, wie ihr Hello world! ausgeben könnt:

[3]:
!echo "Hello world!"
Hello world!

Werte an und von der Shell übergeben#

Es gibt eine clevere Möglichkeit, auf die Ausgabe eines UNIX/Linux-Befehls als Variable in Python zuzugreifen, z.B. mit:

[4]:
contents = !ls

Hier wurde der Python-Variable contents die Ausgabe des Befehls ls zugewiesen. Als Ergebnis von contents entsteht eine Liste, wobei jedes Listenelement einer Zeile in der Ausgabe entspricht. Mit dem print-Befehl gebt ihr den Listeninhalt aus:

[5]:
print(contents)
['debugging.ipynb', 'display.ipynb', 'examples.ipynb', 'extensions.rst', 'importing.ipynb', 'index.rst', 'magics.ipynb', '\x1b[34mmypackage\x1b[m\x1b[m', 'myscript.py', 'shell.ipynb', 'start.rst', '\x1b[31mtab-completion-for-anything.png\x1b[m\x1b[m', '\x1b[31mtab-completion-for-modules.png\x1b[m\x1b[m', '\x1b[31mtab-completion-for-objects.png\x1b[m\x1b[m', '\x1b[34munix-shell\x1b[m\x1b[m']

Das gleiche Ergebnis seht ihr unten, wenn ihr den Befehl pwd ausführt:

[6]:
directory = !pwd
[7]:
print(directory)
['/Users/veit/cusy/trn/Python4DataScience-de/docs/workspace/ipython']

Shell-bezogene Magic-Befehle#

[8]:
!pwd
/Users/veit/cusy/trn/Python4DataScience-de/docs/workspace/ipython
[9]:
!cd ..
[10]:
!pwd
/Users/veit/cusy/trn/Python4DataScience-de/docs/workspace/ipython
[11]:
%cd ..
/Users/veit/cusy/trn/Python4DataScience-de/docs/workspace

Neben %cd gibt es noch folgende andere Shell-bezogene Magic-Befehle: %cat, %cp, %env, %ls, %man, %mkdir, %more, %mv, %pwd, %rm und %rmdir.

%automagic-Funktion#

Mit der %automagic-Funktion lassen sich diese auch ohne vorangestelltes %-Zeichen verwenden:

[14]:
%automagic

Automagic is ON, % prefix IS NOT needed for line magics.
[15]:
cd ..
/Users/veit/cusy/trn/Python4DataScience-de/docs