셸에는 파일을 다루고 한 프로그램에서 다른 프로그램으로 데이터를 가져 오는 데 필요한 특수 기능이 있습니다 (데이터가 텍스트라고 가정). 이러한 작업에서 쉘 스크립트는 Python과 같은 스크립팅 언어보다 덜 성 가실 수 있습니다.
셸 스크립팅은 사용하는 명령이 기본적으로 명령 줄에서 사용하는 것과 동일한 명령이라는 장점이 있으므로 셸에서 작업을 수행 할 수있는 경우 동일한 작업을 스크립팅하는 데 절반 이상이 걸립니다.
예를 들어 모든 PNG 파일을 현재 디렉토리에서 지정된 디렉토리로 이동하는 bash 스크립트가 있습니다.
#!/usr/bin/sh
mv *.png $1
여기 파이썬 버전이 있습니다.
#!/usr/bin/python
import sys, shutil, glob
for filename in glob.iglob("./*.png"):
shutil.move(filename, sys.argv[1])
당신은 알 수 있습니다 :
- bash 스크립트는 줄을 세면 (세방 줄 제외) 파이썬보다 세 번째입니다.
- Python 스크립트에는 세 개의 라이브러리를 가져와야하지만이 작업에 필요한 모든 것은 bash에서 기본적으로 사용 가능합니다
- 파이썬 스크립트는 파일을 이동시키기 위해 명시적인 루프를 필요로하는 반면, 이것은
mv
bash 에서 명령 의 의미론의 일부입니다
- bash 스크립트는 더 빠르게 실행될 수 있습니다. bash에서 호출
source
하면 쉘의 동일한 인스턴스에서 실행할 수 있습니다.
glob.iglob("./*.png")
그냥 말 만하면 *.png
파이썬에서 기본 파이프 연산을 작성하려면 자세한 정보가 놀라 울 것입니다. 물론 파이핑 스루와 같은 일부 grep
는 외부 프로그램을 사용하는 대신 Python 코드로 대체 할 수 있으므로 파이프를 많이 만들 필요가없는 경우가 많습니다.
반례로서, 한 번은 특정 디렉토리에 각 파일 이름이 얼마나 오래 있는지 확인하는 루틴을 작성해야했습니다. 특정 OS에서 지원하는 것보다 긴 경우 단축해야합니다. 이로 인해 파일 이름이 중복되어 수정해야했으며 웹 페이지에서 연결되기 때문에 단축 된 이름은 안정적이어야했습니다. 즉, 동일한 긴 파일 이름이 항상 생성되는 방식으로 생성해야합니다. 동일한 단축 파일 이름. 나는 긴 파일 이름의 16 진수 md5를 생성하고 그 이름의 첫 네 문자를 단축 이름에 추가 하여이 작업을 수행했습니다 (이름은 여전히 충돌 할 수 있지만 매우 어색하지 않았으므로 해당 조건을 확인하고 발생 해야하는 경우) .
이미 bash로 작성된 빌드 시스템의 일부이기 때문에 bash 에서이 작업을 수행했습니다. 당신이 생각하고있는 것만 큼 정확하게 맞추기가 어려웠습니다. 파이썬으로 작성하는 데 훨씬 적은 시간이 걸렸으며 아마도 더 명확했을 것입니다.
간단히 말해서, 다른 언어는 다른 종류의 작업을 위해 설계되었습니다. 업무에 가장 적합한 언어를 선택하십시오.