sandzhaj.space

Меню
  • главная
  • cтатьи
  • книги
  • про автора
Меню

Python vs Bash в ежедневных задачах

Опубликовано в 04.05.202305.05.2023 от sandzhaj

Я всегда считал, что для повседневных задач в небольших скриптах куда проще использовать Bash — он нативный для запускаемой системы, а функционала, который предоставляют системные утилиты — вполне достаточно.

Однако для более сложных задач, таких как анализ данных, я предпочитаю использовать Python. Недавно я разрабатывал новый скрипт, который анализирует большое количество файлов, причем некоторые из них зашифрованы с помощью Ansible Vault. Ранее я уже расшифровывал такие файлы в Bash-скриптах, используя следующую команду:

find . -name "*-secrets.yaml" -exec ansible-vault decrypt {} --vault-password-file pass.txt \;

Расшифровка всех файлов занимала около 40 секунд, но на удаленном агенте с другой конфигурацией железа процесс затягивался до 3-4 минут. В конечном итоге, я решил запускать расшифровку файлов параллельно, что позволило сэкономить несколько минут:

find . -type f -name "*-secrets.yaml" -print0 | xargs -0 -P 20 -I % sh -c 'ansible-vault encrypt % --vault-password-file pass.txt'

Когда я реализовывал аналогичный функционал на Python, у меня был объект [список файлов для расшифровки]. Исходя из опыта с Bash, я подумал, что мне также необходимо выполнять расшифровку параллельно, однако решив проверить, сколько времени это займет внутри цикла с использованием библиотеки Ansible я был удивлен: результат оказался примерно одинаковым как локально, так и на агенте — около 12 секунд.

Тут речь не про саму расшифровку, а обработку циклов.

Если сделать простой тест:

# test.py
for i in range(10000001):
  print(i)

# test.sh
#!/bin/bash
for i in {0..10000000}
do
  echo $i
done

И запустить каждый, разница может быть больше, чем в 5 раз:

python3 test.py > test_result_python  3.26s user 0.06s system 98% cpu 3.353 total
bash test.sh > test_result_bash  16.75s user 15.53s system 98% cpu 32.883 total

Разумеется, все зависит от объема данных и какие задачи вы выполняете, но когда полезно сэкономить время, опираться на Bash — рискованная затея.

  • bash
  • python
  • автоматизация
  • Поиск

    Подпишись

    Теги

    bash git helm python zsh автоматизация нейросеть ооп терминал трекинг

    ©2025 sandzhaj.space