나는 bash와 약간의 사랑과 증오 관계가 있습니다. 나는 터미널에서 많은 시간을 보내고 bash는 기본 "프로그래밍 언어"입니다. 때때로 나는 find, grep 및 xargs가 인프라를 운영하는 사람들에게 내가 진지하다는 것을 깨달을 때까지 웃고 있다고 말합니다.
일부 Python을 선택하는 것은 시스템 관리자에게 완벽한 선택입니다. 터미널에서 무엇이든 처리해야 하지만 bash를 사용하고 싶지 않거나 bash에 대해 너무 복잡한 요구 사항이 있는 사람에게도 좋습니다. 작업이 초과되면
find $(pwd) -name "*.txt" | xargs -I {} echo "do stuff with {}"
이제 파이썬을 깰 시간입니다!
Python을 명령줄 언어로 사용하면 많은 이점이 있습니다.
- Python에는 거의 모든 작업에 도움이 되는 멋진 라이브러리가 많이 있습니다. 여기에는 시스템 작업 처리, 파일 읽기, 디렉토리 나열, 루프 작성, 종료 코드 확인 등이 포함됩니다.
- IDE로 자동 완성. 진지하게. 암기하고 싶은 사람이 있나요?
- 강력한 테스트 제품군이 필요하다면(그렇지 않다면 자신의 것으로 만들어야 함).
- iPython 콘솔. 멋지네요. 놀랍다. 좋아요.
- Python은 대부분의 시스템에서 사용할 수 있으며 그렇지 않은 경우 Miniconda에서 얻을 수 있습니다.
- try 및 catch 블록을 사용한 강력한 오류 검사
- 다른 운영 체제에서 작업하는 경우 내부적으로 모든 것을 처리하는 Python 라이브러리를 사용할 수 있습니다.
- 프로그래밍 능력이 없더라도 Python은 시작하기 쉬운 언어입니다.
시작하기
시작하려면 먼저 Python을 설치하거나 Miniconda와 함께 설치해야 합니다.
iPython이 설치되어 있는지 확인
which python
which ipython
이 두 가지가 모두 성공하면 비즈니스에 성공한 것입니다! Python이 있지만 iPython이 없는 경우 설치해야 합니다. 시스템 패키지로 설치할 수도 있지만 그냥 Miniconda와 함께 설치하는 것이 좋습니다.
미니콘다 설치
여기에서 OS용 설치 프로그램을 다운로드하세요. Python3 설치를 권장합니다.
그런 다음 간단한 설치만 하면 됩니다.
bash Miniconda3-latest-Linux-x86_64.sh
프롬프트를 따르면 Miniconda3가 설치됩니다. 설치하고 나면 업데이트를 실행하고 싶을 것입니다. 왜냐하면 이것은 기술이고 물론 업데이트를 실행하기를 원하기 때문입니다.;-)
conda update conda
conda config --add channels conda-forge
conda update -y --all
conda install -y ipython
문제 해결
패키지를 설치하는 데 문제가 있는 경우 여기에 몇 가지 팁이 있습니다.
conda clean --all
실행 다시 시도하십시오.- 올바른 채널을 사용하고 있는지 확인하세요.
conda update -y --all
실행- 전역 conda 공간에 가능한 한 적게 설치하십시오. 대신 다양한 작업과 프로젝트를 위한 환경을 만드세요. 이에 대해서는 다음에 설명하겠습니다.
Conda로 환경 만들기
virtualenv, pipenv(이게 뭔가요?), Rbenv, plenv, anyenv 또는 몇 년 동안 등장한 다양한 환경을 사용해 본 적이 있다면 매우 친숙하게 들릴 것입니다. 아이디어는 서로 다른 프로젝트가 자체적으로 격리된 소프트웨어 환경을 가져야 한다는 것입니다.
conda create -n my-project ipython package1 package2 package2
저와 같고 iPython을 쉽게 사용할 수 있게 하려면 새로운 환경에 설치해야 합니다!
시스템 관리를 위한 Python 라이브러리
예제를 시작하기 전에 문서와 함께 몇 가지 편리한 패키지를 나열해 보겠습니다.
패키지로 이동하는 것은 os 패키지입니다. 이를 사용하여 디렉토리를 나열하고, 파일이 있는지 확인하고, 심볼릭 링크가 있는지 확인하고, 디렉토리를 만들고, 시스템 명령을 실행하고, 환경 변수를 가져오고 설정하는 등의 작업을 수행할 수 있습니다. 멋지네요!
편리한 Python 라이브러리로 존재하지 않는 시스템 명령을 실행하기 위한 두 번째 패키지는 subprocess 모듈입니다.
shutil에는 os 라이브러리에 없는 파일 작업이 있습니다.
pprint 라이브러리는 들여쓰기가 좋은 복잡한 데이터 구조를 출력합니다.
pytest 라이브러리를 사용하면 Python 코드를 테스트할 수 있습니다. 사실 처음(몇 번) 제대로 작동하는 것은 없기 때문입니다.
코드를 어떻게 실행합니까?
드디어! 코드!
시스템 관리를 위해 Python을 사용하는 경우 iPython 콘솔로 바로 들어가거나 스크립트를 작성한 다음 python name-of-script.py
로 실행할 수 있습니다. .
스크립트를 작성하는 것을 선호한다면 선택의 폭이 매우 넓으며 이는 개인 취향의 문제입니다. 유료인 PyCharm을 사용하지만 Visual Studio Code와 Atom은 똑같이 훌륭한 무료 선택입니다.
나는 그것이 내가 무엇을 하고 있는지에 달려 있다는 것을 알았다. 때로는 iPython 콘솔을 열고 타이핑을 시작하기도 하고, 어떤 때는 테스트 등을 통해 더 강력한 무언가가 필요합니다.
iPython 콘솔이나 위에 나열된 편집기 중 하나를 사용하는 경우 자동 완성이 됩니다. 자동완성은 굉장하다! iPython을 사용하면 기능을 입력하기 시작하고 탭을 눌러 원하는 잠재적 기능 목록을 가져옵니다.
자동 완성을 얼마나 좋아하는지 표현할 수 없습니다.;-)
도움 받기
모든 라이브러리의 문서 페이지로 이동할 수 있지만 라이브러리나 함수의 이름을 알고 있다면 iPython에서 불러올 수 있습니다.
대부분의 IDE와 텍스트 편집기에서도 도움말 메뉴를 불러올 수 있지만 이는 편집기에 따라 다릅니다.
예시
먼저 패키지를 가져와야 합니다.
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 콘솔을 깨고 대신 무엇을 생각해낼 수 있는지 확인하는 것을 고려하십시오!