Подписка на блог

Customize in /user/extras/subscribe-sheet.tmpl.php.

Sample text.

Twitter, Facebook, VK icon VK, Telegram, LinkedIn, Odnoklassniki, Pinterest, РСС JSON Feed

Sample text.

Эволюция командной оболочки 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.

Подписаться на блог
Поделиться
Отправить
Запинить
 71   3 мес   Linux   Python
Популярное