Эволюция командной оболочки Python
Рассмотрим на примере команды ls (просматривает список файлов в директории), как со временем развивалась интерактивная оболочка Python.
Начнем с классической интерактивной оболочки (импортируем модуль os и вызываем метод listdir):
(base) dmf@debian:~/L02-admin$ python3
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.listdir("./")
['4.txt', 'some_module.py', '0.txt', '.txt', '2.txt', 'командная_оболочка.ipynb', '__pycache__', 'subprocess_ping_function.py', '1.txt', 'Модуль subprocess.ipynb', '3.txt', 'ipython', 'disk_info.py', 'subprocess_run_basic.py', 'введение.ipynb', 'about_ip.ipynb', '.ipynb_checkpoints', 'test_dir.py', 'listdir_script.py']
>>>
Напишем скрипт listdir_script.py:
(base) dmf@debian:~/L02-admin$ cat listdir_script.py
import os
print(os.listdir("./"))
Покажем, как его выполнить:
(base) dmf@debian:~/L02-admin$ python3 listdir_script.py
['4.txt', 'some_module.py', '0.txt', '.txt', '2.txt', 'командная_оболочка.ipynb', '__pycache__', 'subprocess_ping_function.py', '1.txt', 'Модуль subprocess.ipynb', '3.txt', 'ipython', 'disk_info.py', 'subprocess_run_basic.py', 'введение.ipynb', 'about_ip.ipynb', '.ipynb_checkpoints', 'test_dir.py', 'listdir_script.py']
В конце 2001 года Fernando Pérez под впечатлением от возможностей Mathematica разработал IPython (код первой версии тут, история тут), который поддерживает возможности классического интерпретатора и добавляет несколько magic-команд:
(base) dmf@debian:~/L02-admin$ ipython
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.16.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import os
In [2]: os.listdir("./")
Out[2]:
['4.txt',
'some_module.py',
'0.txt',
'.txt',
'2.txt',
...
'test_dir.py',
'listdir_script.py']
Теперь Python-скрипты можно запускать внутри интерактивного сеанса IPython:
In [3]: %run listdir_script.py
['4.txt', 'some_module.py', '0.txt', '.txt', '2.txt', 'командная_оболочка.ipynb', '__pycache__', 'subprocess_ping_function.py', '1.txt', 'Модуль subprocess.ipynb', '3.txt', 'ipython', 'disk_info.py', 'subprocess_run_basic.py', 'введение.ipynb', 'about_ip.ipynb', '.ipynb_checkpoints', 'test_dir.py', 'listdir_script.py']
Благодаря magic-командам (%) стирается граница между командами операционной системы (ОС) и IPython:
In [4]: %ls
0.txt 3.txt disk_info.py __pycache__ subprocess_run_basic.py командная_оболочка.ipynb
1.txt 4.txt ipython some_module.py test_dir.py Модуль subprocess.ipynb
2.txt about_ip.ipynb listdir_script.py subprocess_ping_function.py введение.ipynb
Знак % можем не указывать, теперь стало еще сложнее отличить от командной строки ОС:
In [5]: ls ./ # get_ipython().system('ls ./')
0.txt 3.txt disk_info.py __pycache__/ subprocess_run_basic.py командная_оболочка.ipynb
1.txt 4.txt ipython/ some_module.py test_dir.py Модуль subprocess.ipynb
2.txt about_ip.ipynb listdir_script.py subprocess_ping_function.py введение.ipynb
Добавим немного кода на Python:
In [6]: path = "./"
In [7]: ls {path}
0.txt 3.txt disk_info.py __pycache__ subprocess_run_basic.py командная_оболочка.ipynb
1.txt 4.txt ipython some_module.py test_dir.py Модуль subprocess.ipynb
2.txt about_ip.ipynb listdir_script.py subprocess_ping_function.py введение.ipynb
In [8]: ls $path
0.txt 3.txt disk_info.py __pycache__ subprocess_run_basic.py командная_оболочка.ipynb
1.txt 4.txt ipython some_module.py test_dir.py Модуль subprocess.ipynb
2.txt about_ip.ipynb listdir_script.py subprocess_ping_function.py введение.ipynb
Следующий шаг в эволюции — браузерная среда разработки Jupyter Lab, которая объединяет оболочку IPython c возможностью написания произвольных комментариев (расширяется с помощью плагинов).

Выполнение скриптов:

Интеграция кода на Python и команд ОС:

Jupyter Lab удобно использовать для демонстрации кода, визуализации и пр., но он плохо сочетается к задачами обработки множества файлов, т. к. создает собственные врЕменные каталоги. В итоге часть задач лучше решать с помощью командной строки python3.
Медленно, но верно я перевожу все свои курсы по программированию и анализу данных на Jupyter Lab. Вместо сотни отдельных файлов *.py получилась парочка блокнотов *.ipynb.