Рубрики
Без рубрики

Как заменить Bash с помощью Python в качестве вашего языка To-to Command Line

Автор оригинала: Jillian Rowe.

У меня есть немного любви и ненависти отношения с Bash. Я провожу много времени в терминале, и Bash – мой по умолчанию «язык программирования». Иногда я говорю людям, которые находят, Greep и Xargs управляют своей инфраструктурой, и они смеются и смеются, пока не поймут, я серьезно.

Подъем немного Python – идеальный выбор для системных администраторов. Это также отлично подходит для всех, кто должен иметь дело с чем-либо в терминале, но не хочет использовать Bash или имеет потребности, которые слишком сложны для Bash. Как только задача выйдет за пределы

find $(pwd) -name "*.txt" | xargs -I {} echo "do stuff with {}"

Пришло время вырвать Python!

Есть много преимуществ для использования Python в качестве вашего языка командной строки.

  • У Python много хороших библиотек, которые помогают с почти все возможным. Это включает в себя управление системными операциями, чтением файлов, списка каталогов, написание циклов, проверка кодов выхода и т. Д.
  • Автозаполнение с идентификаторами. Шутки в сторону. Кто хочет что-нибудь запомнить?
  • Прочный тестирующий набор, если это ваша вещь (и если это не так, вы должны подумать о том, чтобы сделать это вашим).
  • Консоль ipython. Это замечательно. Это удивительно. Я ЛЮБЛЮ ЭТО.
  • Python доступен в большинстве систем, и если он не может получить его с Миниманда Отказ
  • Прочная ошибка проверки с попытками и ловкой блоков.
  • Если вы работаете на разных операционных системах, вы можете использовать библиотеки Python, которые будут иметь дело со всеми тем, что под капотом.
  • Даже если у вас нет возможности программирования Python – это легкий язык для начала.

Давайте начнем

Чтобы начать, сначала вы понадобитесь, чтобы Python установлен, либо устанавливаю его с Miniconda.

Проверьте, установлен ли у вас iPython

which python
which ipython

Если оба из них успешно, вы в бизнесе! Если у вас есть Python, но не iPython, вам придется установить его. Вы можете установить его как системный пакет, но я действительно рекомендую вам просто установить его с Miniconda.

Установите Minibonda

Возьмите установщик для вашей ОС здесь Отказ Я предлагаю получить установку Python3.

Тогда это просто простая установка.

bash Miniconda3-latest-Linux-x86_64.sh

Следуйте подсказкам, и у вас будет установлено MiniConda3. После того, как у вас установлено, вы захотите запустить обновление, потому что это Tech и, конечно, вы хотите запустить обновление. 😉

conda update conda
conda config --add channels conda-forge
conda update -y --all
conda install -y ipython

Поиск проблемы

Если у вас есть проблемы с установкой каких-либо пакетов, здесь есть несколько советов.

  • Беги Conda Clean - все и попробуй еще раз.
  • Убедитесь, что вы используете правильный канал.
  • Беги CONDA UPDATE -Y --ALL
  • Попробуйте установить как можно меньше к вашему глобальному пространству CODA. Вместо этого создайте среды для разных задач и проектов, которые мы получим в следующую.

Создание условий с кондиционером

Если вы когда-либо использовали Virtualenv, Pipenv (в том, что вещь?), РБенв, Пленв, нюнв или любая другая различные env, которые возникли на протяжении многих лет, это будет звучать очень знакомым для вас. Идея состоит в том, что разные проекты должны иметь свои собственные изолированные программные среды.

conda create -n my-project ipython package1 package2 package2

Если вы похожи на меня и хотите, чтобы IPython легко доступен, убедитесь, что вы устанавливаете его в любую новую среду!

Библиотеки Python для системного администрирования

Прежде чем мы попадем в примеры, давайте просто перечислите несколько удобных пакетов вместе со своими документами.

Мой ходи в упаковку – это ОС упаковка. Вы можете использовать его для перечисления каталогов, проверьте, существуют ли файлы, проверьте, существуют ли SymLinks, составляют каталоги, запускающие системные команды, Get и установить экологические переменные и многое другое. Здорово!

Мой второй пакет для беговых системных команд, которые не существуют как удобные библиотеки Python – подпрокат модуль.

Шусил Имеет файловые операции, которые не в системе ОС.

PPRINT Библиотека печатает сложные структуры данных с хорошим отступом.

Pteest Библиотека Позвольте вам проверить свой код Python, потому что давайте сталкиваемся с этим, ничто не работает правильно первым (мало) времена.

Как мне выполнить мой код?

Ну наконец то! Код!

Когда вы используете Python для администрирования системы, вы можете погрузиться прямо в консоль iPython или написать скрипты, а затем выполнить их с помощью python name-of-script.py Отказ

Если вы предпочитаете написать свои сценарии, у вас есть так много вариантов, и это действительно вопрос личных предпочтений. Я использую Пычарм , что оплачено, но Визуальный студийный код и Атом одинаково отличные бесплатные варианты.

Я считаю, что это зависит от того, на чем я работаю. Иногда я просто открываю консоль ipython и начать печатать, а в других случаях мне нужно что-то более прочное с тестами и othernot.

Если вы используете либо консоль iPython, либо любой из редакторов, которые я перечислил выше, у вас будет автозаполнение. Автозаполнение потрясающее! С помощью iPython просто начните вводить функцию и нажмите вкладку, чтобы получить список потенциальных функций, которые вы можете захотеть.

Я не могу выразить, насколько я люблю автозаполнение. 😉

Получить помощь

Вы можете перейти на любую из страниц DOC для любой библиотеки, но если вы знаете имя библиотеки, либо функцию, которую вы можете принести ее в iPython.

Вы можете привлечь меню «Справка» в большинстве IDE и Text редакторов, но это будет специфично для вашего редактора.

Примеры

Сначала вам нужно будет импортировать ваши пакеты

import os
import subprocess
import shutil
from pprint import pprint

Вот несколько примеров общих операций файлов и каталогов.

# Get your current working directly
# This returns a string
my_cwd = os.getcwd()
print(my_cwd)
# List the contents of a directory
# This returns a list
dir_list = os.listdir()
for item in dir_list:
    print(item)
# Get the Absolute Path name of a file (file + current working dir)
os.path.abspath('some-file')
#Get the basename - returns file
os.path.basename('/path/to/file')
# Split a directory path - platform independent
os.path.split(os.getcwd())
# Out[17]: ('/Users', 'jillian')
# Check if a path exists
os.path.exists('/path/on/filesystem')
# Check if a path is a symlink
os.path.islink()

Переместить файлы и каталоги вокруг

# Copy a directory
# cp -rf
shutil.copytree('src', 'dest')
# Copy a file
# cp -rf
shutil.copyfile('file1', 'file2')
# Move a directory
# mv
shutil.move('src', 'dest')

Не все будет доступно через библиотеки Python, такие как установка системных библиотек, поэтому запустите несколько системных команд!

# Run an arbitrary system command
command = "echo 'hello'"
result = subprocess.run(command.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
#Print the stdout and stderr
print(result.stdout)
print(result.stderr)

Написать в файлы!

# Write to a file (and create it if it doesn't exist)
# echo "hello" > hello.txt
f= open("hello.txt","w+")
f.write("hello!")
f.close()
# Append to a file
# echo "hello" >> hello.txt
f = open("hello.txt", "a+")
f.write("hello again!")
f.close()

Напишите некоторые тесты!

Испытания в основном работают с использованием функции, называемой Assert, которая по сути говорит убедиться, что это правда, а если не умереть громко.

def test_system_command():
    """Test the exit code of a system command"""
    command = "echo 'hello'"
    result = subprocess.run(command.split(' '), stdout=subprocess.PIPE)
    assert result.returncode == 0

Поместите эту функцию в файл под названием test_my_code.py и беги как pytest test_my_code.py Отказ

Заворачивать

Это это для моих главных советов и трюков для использования Python в качестве замены Bash. В следующий раз, когда вам нужно будет написать петлю в Bash, подумайте о том, чтобы вытащить консоль iPython и увидеть, что вы можете придумать вместо этого!