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 mypackage
debugging.ipynb.license myscript.py
display.ipynb shell.ipynb
display.ipynb.license shell.ipynb.license
examples.ipynb start.rst
examples.ipynb.license tab-completion-for-anything.png
extensions.rst tab-completion-for-anything.png.license
importing.ipynb tab-completion-for-modules.png
importing.ipynb.license tab-completion-for-modules.png.license
index.rst tab-completion-for-objects.png
magics.ipynb tab-completion-for-objects.png.license
magics.ipynb.license unix-shell
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', 'debugging.ipynb.license', 'display.ipynb', 'display.ipynb.license', 'examples.ipynb', 'examples.ipynb.license', 'extensions.rst', 'importing.ipynb', 'importing.ipynb.license', 'index.rst', 'magics.ipynb', 'magics.ipynb.license', '\x1b[34mmypackage\x1b[m\x1b[m', 'myscript.py', 'shell.ipynb', 'shell.ipynb.license', 'start.rst', '\x1b[31mtab-completion-for-anything.png\x1b[m\x1b[m', 'tab-completion-for-anything.png.license', '\x1b[31mtab-completion-for-modules.png\x1b[m\x1b[m', 'tab-completion-for-modules.png.license', '\x1b[31mtab-completion-for-objects.png\x1b[m\x1b[m', 'tab-completion-for-objects.png.license', '\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