분명히 Python은 더 사용자 친화적이며 Google에서 빠른 검색은 Python이 바이트 컴파일되기 때문에 일반적으로 더 빠르다는 많은 결과를 보여줍니다. 사전 기반 작업에서 2000 % 이상의 개선을 볼 수 있다고 주장하는 이 사실 도 발견 했습니다 .
이 문제에 대한 귀하의 경험은 무엇입니까? 어떤 종류의 작업에서 각자가 확실한 승자입니까?
답변
일반적인 메인 프레임 흐름 …
Input Disk/Tape/User (runtime) --> Job Control Language (JCL) --> Output Disk/Tape/Screen/Printer
| ^
v |
`--> COBOL Program --------'
일반적인 Linux 흐름 …
Input Disk/SSD/User (runtime) --> sh/bash/ksh/zsh/... ----------> Output Disk/SSD/Screen/Printer
| ^
v |
`--> Python script --------'
| ^
v |
`--> awk script -----------'
| ^
v |
`--> sed script -----------'
| ^
v |
`--> C/C++ program --------'
| ^
v |
`--- Java program ---------'
| ^
v |
: :
쉘은 Linux의 접착제입니다.
sh / ksh / bash / … 와 같은 Linux 쉘 은 이전 메인 프레임 작업 제어 언어와 매우 유사한 입력 / 출력 / 흐름 제어 지정 기능을 제공합니다. O / S가 지원하는 모든 언어로 작성된 다른 실행 프로세스와 데이터 및 제어를 효율적으로 전달하도록 최적화 된 상태에서 자체적 으로 Turing 완전한 언어 입니다.
대부분의 Linux 응용 프로그램은 대부분의 프로그램이 작성된 언어에 관계없이 쉘 스크립트에 의존하며 Bash 가 가장 일반적입니다. 데스크탑에서 아이콘을 클릭하면 일반적으로 짧은 Bash 스크립트 가 실행됩니다 . 이 스크립트는 직접 또는 간접적으로 필요한 모든 파일이 어디에 있는지 알고 변수와 명령 줄 매개 변수를 설정하여 마지막으로 프로그램을 호출합니다. 이것은 쉘의 가장 간단한 사용입니다.
그러나 우리가 알고있는 Linux는 시스템을 시작하고, 이벤트에 응답하고, 실행 우선 순위를 제어하고, 프로그램을 컴파일, 구성 및 실행하는 수천 개의 쉘 스크립트가 없으면 Linux가 될 수 없습니다. 이들 중 다수는 상당히 크고 복잡합니다.
셸은 컴파일 타임이 아닌 런타임에 함께 연결되는 미리 빌드 된 구성 요소를 사용할 수있는 인프라를 제공합니다. 이러한 구성 요소는 단독으로 또는 재 컴파일없이 다른 조합으로 사용할 수있는 독립형 프로그램입니다. 이들을 호출하는 구문은 Bash 내장 명령 의 구문과 구별 할 수 없으며 실제로 시스템에 독립 실행 형 실행 파일이 있고 종종 추가 옵션이있는 수많은 내장 명령이 있습니다.
성능면에서 Python 과 Bash 사이에는 언어 차원의 차이가 없습니다 . 그것은 전적으로 각각이 어떻게 코딩되고 어떤 외부 도구가 호출되는지에 달려 있습니다.
모든 같은 잘 알려진 도구 나오지 AWK, 그렙, BC 주, DC, TR, 등은 먼지 중 하나의 언어로 그 작업을하고 떠날 것이다. Bash 는 Python 보다 Bash 를 사용하는 도구와 같은 도구에서 데이터를 다시 호출하고 전달하는 것이 더 쉽고 효율적이기 때문에 그래픽 사용자 인터페이스가없는 모든 경우에 선호됩니다 .
공연
Bash 쉘 스크립트가 호출 하는 프로그램 과 전체 처리량 및 / 또는 응답 성이 동등한 Python 보다 좋거나 나쁠 지 여부에 따라 주어진 하위 작업에 대한 적합성에 따라 다릅니다 . 문제를 복잡하게 만들기 위해 Python 은 대부분의 언어와 마찬가지로 다른 실행 파일을 호출 할 수도 있지만 더 번거롭고 자주 사용되지는 않습니다.
사용자 인터페이스
Python 이 확실한 승자 인 한 영역 은 사용자 인터페이스입니다. 이는 기본적으로 GTK 그래픽을 지원하고 Bash 보다 훨씬 직관적이기 때문에 로컬 또는 클라이언트-서버 애플리케이션을 구축하는 데 탁월한 언어입니다 .
Bash 는 텍스트 만 이해합니다. GUI 및 데이터를 다시 전달하려면 다른 도구를 호출해야합니다. 파이썬 스크립트는 하나 개의 옵션입니다. 더 빠르지 만 덜 유연한 옵션은 YAD, Zenity 및 GTKDialog와 같은 바이너리 입니다.
반면 같은 껍질 배쉬 같은 GUI를 잘 작동 야드 , GtkDialog (임베디드 XML이 같은 GTK + 기능 인터페이스) , 대화 , 그리고 xmessage , 파이썬은 훨씬 더 할 수있는 등 더 복잡한 GUI 창입니다.
요약
쉘 스크립트를 사용하여 빌드하는 것은 데스크탑 PC와 같은 기성 구성 요소로 컴퓨터를 조립하는 것과 같습니다.
Python으로 빌드 , C ++ 또는 대부분의 다른 언어 것이 더 함께 스마트 폰이 길을 칩 (라이브러리) 및 기타 전자 부품을 납땜하여 컴퓨터를 구축하는 것과 같다.
최상의 결과는 일반적으로 각자가 가장 잘하는 일을 할 수있는 언어 조합을 사용하여 얻을 수 있습니다. 한 개발자는 이것을 ” 다국어 프로그래밍 ” 이라고 부릅니다 .
답변
일반적으로 bash는 python을 사용할 수없는 환경에서만 python보다 잘 작동합니다. 🙂
진지하게, 나는 매일 두 언어를 다뤄야하고, 선택이 주어진다면 즉시 bash를 통해 파이썬을 가져갈 것이다. 아아, 누군가가 (오해하게도 IMHO) 파이썬이 적합하기에 “너무 크다”고 결정했기 때문에 특정 “작은”플랫폼에서 bash를 사용해야합니다.
일부 선택 작업에 대해 bash가 Python보다 빠를 수 있다는 것은 사실이지만, 개발이 빠르거나 유지 관리가 쉽지는 않습니다 (적어도 10 줄 정도의 코드가 지나면). Bash의 유일한 장점은 파이썬이나 루비, 루아 등의 편재성입니다.
답변
bash와 Python이 합리적인 선택 인 시나리오에서 개발자 효율성 은 나에게 훨씬 더 중요합니다.
일부 작업은 bash에 적합하고 다른 작업은 Python에 적합합니다. bash 스크립트로 무언가를 시작하고 몇 주에 걸쳐 진화함에 따라 Python으로 변경하는 것도 드문 일이 아닙니다.
Python의 큰 장점은 파일 이름 처리와 관련된 코너 케이스에 있으며 일반적인 스크립팅 요구 사항을위한 glob , shutil , subprocess 및 기타 기능이 있습니다.
답변
스크립트를 작성할 때 성능은 중요하지 않습니다 (대부분의 경우).
성능에 관심이 있다면 ‘Python vs Bash’는 잘못된 질문입니다.
Python :
+ 작성
하기 쉬움 + 유지
하기 쉬움 + 코드 재사용 용이 (일반 코드가있는 파일을 포함하는 보편적 인 오류 방지 방법을 찾으십시오. sh
감히)
+ OOP도 가능합니다!
+ 더 쉬운 인수 구문 분석. 글쎄, 쉽지는 않습니다. 그것은 여전히 내 취향에 너무 장황 할 것 argparse
입니다. 그러나 파이썬에는 기능이 내장되어 있습니다
.-추악한 ‘하위 프로세스’. 명령을 연결하고 코드가 얼마나 추악 해 질지 강하게 울지 마십시오. 특히 종료 코드에 관심이 있다면.
Bash :
+ ubiquity, 앞서 말했듯이 실제로.
+ 간단한 명령 체인. 이것이 다양한 명령을 간단한 방법으로 결합하는 방법입니다. 또한 Bash
(아님 sh
)과 같은 일부 개선 사항이 pipefail
있으므로 연결이 정말 짧고 표현력이 좋습니다.
+ 타사 프로그램을 설치할 필요가 없습니다. 바로 실행할 수 있습니다.
-맙소사. IFS, CDPATH .. 수천 개.
하나는 스크립트를보다 큰 100 LOC를 작성하는 경우 선택 파이썬을
하면 스크립트에서 하나의 필요 경로 조작 : 선택 파이썬 (3)
필요 다소처럼 하나의 경우 alias
선택 :하지만 약간 복잡 배쉬를 / 쉬
어쨌든, 그들이 무엇을 할 수 있는지 아이디어를 얻기 위해 양쪽 모두를 시도해야합니다.
패키징 및 IDE 지원 지점으로 대답을 확장 할 수 있지만이 측면에 대해 잘 모릅니다.
항상 그렇듯이 똥 샌드위치와 거대한 주물 중에서 선택해야합니다. 그리고 몇 년 전만해도 Perl은 새로운 희망이었습니다. 지금있는 곳.
답변
성능면에서 bash는 프로세스 시작 시간에 python보다 성능이 뛰어납니다.
다음은 Linux Mint를 실행하는 핵심 i7 랩톱의 몇 가지 측정 값입니다.
Starting process Startup time
empty /bin/sh script 1.7 ms
empty /bin/bash script 2.8 ms
empty python script 11.1 ms
python script with a few libs* 110 ms
* Python로드 라이브러리 : os, os.path, json, 시간, 요청, 스레딩, 하위 프로세스
이것은 큰 차이를 보여 주지만 일반적으로 외부 프로세스를 호출해야하기 때문에 bash 실행 시간이 현명한 작업을 수행해야하는 경우 빠르게 저하됩니다.
성능에 관심이 있다면 bash는 다음 용도로만 사용하십시오.
- 정말 간단하고 자주 호출되는 스크립트
- 주로 다른 프로세스를 호출하는 스크립트
- 수동 관리 작업과 스크립팅 사이에 최소한의 마찰이 필요한 경우-몇 가지 명령을 빠르게 확인하여 file.sh에 배치합니다.
답변
Bash는 주로 배치 / 셸 스크립팅 언어로, 호환성 문제는 말할 것도없고 다양한 데이터 유형과 제어 구조에 대한 모든 종류의 단점을 훨씬 덜 지원합니다.
어느 것이 더 빠릅니까? 여기에서도 사과와 사과를 비교하지 않았기 때문입니다. ascii 텍스트 파일을 정렬해야하고 zcat, sort, uniq 및 sed와 같은 도구를 사용했다면 Python 성능을 현명하게 사용하게 될 것입니다.
그러나 부동 소수점 및 다양한 제어 흐름을 지원하는 적절한 프로그래밍 환경이 필요한 경우 Python이 승리합니다. Bash와 Python으로 재귀 알고리즘을 작성했다면 Python 버전이 몇 배 이상 승리 할 것입니다.
답변
최소한의 노력으로 빠른 유틸리티를 함께 사용하려는 경우 bash가 좋습니다. 응용 프로그램을 둘러싼 래퍼의 경우 bash는 매우 유용합니다.
개선 사항을 추가하기 위해 계속해서 돌아와야 할 수있는 모든 것은 아마도 (항상은 아니지만) 파이썬과 같은 언어에 더 적합 할 것입니다. 1000 줄이 넘는 Bash 코드는 유지 관리가 매우 고통스러워지기 때문입니다. Bash 코드도 길어지면 디버깅을 짜증나게합니다 …….
이러한 종류의 질문에 대한 문제의 일부는 내 경험상 쉘 스크립트가 일반적으로 모두 사용자 지정 작업이라는 것입니다. 이미 무료로 사용할 수있는 솔루션이있는 곳에서 접한 쉘 스크립팅 작업은 거의 없었습니다.