Python vs Bash - Mỗi loại tác vụ vượt trội hơn tác vụ khác về hiệu suất?


97

Rõ ràng Python thân thiện với người dùng hơn, một tìm kiếm nhanh trên google cho thấy nhiều kết quả nói lên điều đó, vì Python được biên dịch theo byte thường nhanh hơn. Tôi thậm chí còn tìm thấy điều này tuyên bố rằng bạn có thể thấy sự cải thiện hơn 2000% đối với các hoạt động dựa trên từ điển.

Kinh nghiệm của bạn về vấn đề này là gì? Trong loại nhiệm vụ nào mỗi người là người chiến thắng rõ ràng?


6
Đây thực sự không phải là một cuộc thăm dò, không có tùy chọn được xác định trước, tôi cần một số thông tin chi tiết về công cụ nào hoạt động tốt nhất.
Doppelganger

Câu trả lời:


94

Dòng máy tính lớn điển hình ...

Input Disk/Tape/User (runtime) --> Job Control Language (JCL) --> Output Disk/Tape/Screen/Printer
                                   |                          ^
                                   v                          |
                                   `--> COBOL Program --------' 

Luồng Linux điển hình ...

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                          |
                                   :                          :

Vỏ là chất kết dính của Linux

Các shell Linux như sh / ksh / bash / ... cung cấp các phương tiện chỉ định đầu vào / đầu ra / điều khiển luồng giống như Ngôn ngữ điều khiển công việc của máy tính lớn cũ ... nhưng trên steroid! Chúng là ngôn ngữ hoàn chỉnh của Turing theo đúng nghĩa của chúng trong khi được tối ưu hóa để truyền dữ liệu và kiểm soát một cách hiệu quả đến và từ các quy trình thực thi khác được viết bằng bất kỳ ngôn ngữ nào mà O / S hỗ trợ.

Hầu hết các ứng dụng Linux, bất kể phần lớn chương trình được viết bằng ngôn ngữ nào, đều phụ thuộc vào các tập lệnh shell và Bash đã trở nên phổ biến nhất. Nhấp vào một biểu tượng trên màn hình nền thường chạy một tập lệnh Bash ngắn . Tập lệnh đó, trực tiếp hoặc gián tiếp, biết tất cả các tệp cần thiết ở đâu và đặt các biến và tham số dòng lệnh, cuối cùng gọi chương trình. Đó là cách sử dụng đơn giản nhất của shell.

Tuy nhiên, Linux như chúng ta biết sẽ khó có thể là Linux nếu không có hàng nghìn tập lệnh shell khởi động hệ thống, phản hồi các sự kiện, kiểm soát các ưu tiên thực thi và biên dịch, cấu hình và chạy các chương trình. Nhiều trong số này khá lớn và phức tạp.

Vỏ cung cấp một cơ sở hạ tầng cho phép chúng tôi sử dụng các thành phần được xây dựng trước được liên kết với nhau tại thời gian chạy thay vì thời gian biên dịch. Các thành phần đó là các chương trình độc lập theo đúng nghĩa của chúng, có thể được sử dụng một mình hoặc kết hợp với nhau mà không cần biên dịch lại. Không thể phân biệt cú pháp để gọi chúng với cú pháp của lệnh nội trang Bash , và trên thực tế có rất nhiều lệnh nội trang mà cũng có một lệnh thực thi độc lập trên hệ thống, thường có các tùy chọn bổ sung.

Không có sự khác biệt về ngôn ngữ giữa PythonBash về hiệu suất. Nó hoàn toàn phụ thuộc vào cách mỗi mã được mã hóa và công cụ bên ngoài nào được gọi.

Bất kỳ công cụ nổi tiếng nào như awk, sed, grep, bc, dc, tr, v.v. sẽ bỏ đi thực hiện các thao tác đó bằng một trong hai ngôn ngữ. Bash sau đó được ưu tiên cho bất kỳ thứ gì không có giao diện người dùng đồ họa vì việc gọi và chuyển dữ liệu trở lại từ một công cụ như những công cụ có Bash dễ dàng và hiệu quả hơn Python .

Hiệu suất

Nó phụ thuộc vào chương trình mà Bash shell script gọi và tính phù hợp của chúng với nhiệm vụ con mà chúng được cung cấp cho dù thông lượng tổng thể và / hoặc khả năng đáp ứng sẽ tốt hơn hay kém hơn Python tương đương . Để làm phức tạp các vấn đề , Python , giống như hầu hết các ngôn ngữ, cũng có thể gọi các tệp thực thi khác, mặc dù nó cồng kềnh hơn và do đó không được sử dụng thường xuyên.

Giao diện người dùng

Một lĩnh vực mà Python là người chiến thắng rõ ràng là giao diện người dùng. Điều đó làm cho nó trở thành một ngôn ngữ tuyệt vời để xây dựng các ứng dụng cục bộ hoặc máy chủ vì nó hỗ trợ đồ họa GTK và trực quan hơn nhiều so với Bash .

Bash chỉ hiểu văn bản. Các công cụ khác phải được gọi cho GUI và dữ liệu được truyền lại từ chúng. Một tập lệnh Python là một lựa chọn. Các tùy chọn nhanh hơn nhưng kém linh hoạt hơn là các mã nhị phân như YAD, Zenity và GTKDialog .

Trong khi các shell như Bash hoạt động tốt với các GUI như Yad , GtkDialog (giao diện giống như XML được nhúng vào các hàm GTK +) , hộp thoạixmessage , Python có nhiều khả năng hơn và tốt hơn cho các cửa sổ GUI phức tạp.

Tóm lược

Xây dựng với các tập lệnh shell cũng giống như lắp ráp một máy tính với các thành phần sẵn có theo cách của PC để bàn.

Xây dựng bằng Python , C ++ hoặc hầu hết bất kỳ ngôn ngữ nào khác giống như xây dựng một máy tính bằng cách hàn các chip (thư viện) và các bộ phận điện tử khác với nhau theo cách của điện thoại thông minh.

Kết quả tốt nhất thường thu được bằng cách sử dụng kết hợp các ngôn ngữ mà mỗi ngôn ngữ có thể làm những gì họ làm tốt nhất. Một nhà phát triển gọi đây là " lập trình đa ô ".


16
Tôi không thể nhận ra làm thế nào nó có thể được chấp nhận câu trả lời. Nó không cung cấp bất kỳ thông tin chi tiết nào về nhiệm vụ nào mà hai công việc đó phù hợp hơn.
vigilancer

2
@vigilancer Tôi hy vọng các sửa đổi và bổ sung vừa đăng là hữu ích.
DocSalvager

1
Trong khi tôi đồng ý với các ý kiến ​​khác, điều này không trả lời chính xác câu hỏi. Đây là một trong những câu trả lời hay nhất mà tôi từng đọc!
Jim Mitchener

72

Nói chung, bash chỉ hoạt động tốt hơn python trong những môi trường không có python. :)

Nghiêm túc mà nói, tôi phải xử lý cả hai ngôn ngữ hàng ngày và sẽ đưa python ngay lập tức qua bash nếu được lựa chọn. Than ôi, tôi buộc phải sử dụng bash trên một số nền tảng "nhỏ" nhất định vì ai đó đã (nhầm lẫn, IMHO) đã quyết định rằng python "quá lớn" để phù hợp.

Mặc dù đúng là bash có thể nhanh hơn python đối với một số tác vụ được chọn, nhưng nó không bao giờ có thể nhanh như vậy để phát triển hoặc dễ bảo trì (ít nhất là sau khi bạn vượt qua 10 dòng mã hoặc lâu hơn). Điểm mạnh duy nhất của Bash wrt python hoặc ruby ​​hoặc lua, v.v., là sự phổ biến của nó.


4
Không phải Python đã có trên mọi Linux / Unix, thậm chí cả MacOS? Tôi tò mò không biết hoạt động nào nhanh hơn trong bash - từ những gì tôi hiểu, việc gọi các lệnh riêng biệt khác nhau của nó làm cho nó chậm hơn nhiều so với các lệnh của Python oshoặc shutilmô-đun.
NoBugs

1
@NoBugs Nó chắc chắn sẽ không có trên mọi bản phân phối Linux / Unix. Nó gần như chắc chắn có trên mọi bản phân phối linux chính (ví dụ như bản phân phối dựa trên debian, phần mềm slackware, v.v.) và Mac OS X, tuy nhiên, nếu bạn xây dựng iso của riêng mình với yocto ( yoctoproject.org ), thì bạn không thể có nó, như bạn tùy chỉnh từng gói cho mình. Nhưng có lẽ an toàn khi nói rằng đối với bất kỳ hệ điều hành Unix chính nào bây giờ, nó sẽ được cài đặt với python2 (ít nhất) và có lẽ là python3.
dylnmc

Python là một ngôn ngữ kịch bản tuyệt vời cho các tác vụ phức tạp như GUI đầy đủ tính năng. Quan trọng không kém, nó thực thi các phương pháp lập trình tốt để các chương trình dễ bảo trì hơn. Bash yêu cầu áp dụng các thực hành tốt đã học ở nơi khác để có thể duy trì được. Làm như vậy và sử dụng tiện ích hộp thoại GUI hoặc Python cho giao diện người dùng, mang lại hiệu suất vượt trội (thông qua các chương trình tiện ích cực nhanh được gọi từ Bash) cũng như UX tốt.
DocSalvager

34

Hiệu quả của nhà phát triển quan trọng hơn nhiều đối với tôi trong các tình huống mà cả bash và Python đều là những lựa chọn hợp lý.

Một số nhiệm vụ có lợi cho bản thân nó để bash và những tác vụ khác đối với Python. Cũng không lạ khi tôi bắt đầu một thứ gì đó dưới dạng tập lệnh bash và thay đổi nó thành Python khi nó phát triển trong vài tuần.

Một lợi thế lớn mà Python có là trong các trường hợp góc xung quanh việc xử lý tên tệp, trong khi nó có các quy trình xử lý cầu , tắt , quy trình con và các quy trình khác cho các nhu cầu kịch bản thông thường.


5
Câu hỏi nhằm vào sự so sánh "hiệu suất khôn ngoan" ngụ ý hiệu suất máy chứ không phải hiệu suất của nhà phát triển. Xem các bài kiểm tra hiệu suất của tôi trong một câu trả lời khác.
Grzegorz Luczywo

25

Khi bạn viết script, hiệu suất không quan trọng (trong hầu hết các trường hợp).
Nếu bạn quan tâm đến hiệu suất 'Python vs Bash' là một câu hỏi sai.

Python :
+ dễ viết
hơn + dễ bảo trì
hơn + tái sử dụng mã dễ dàng hơn (cố gắng tìm cách chống lỗi phổ biến để đưa vào các tệp có mã phổ biến sh, tôi dám vậy)
+ bạn cũng có thể làm OOP với nó!
+ phân tích cú pháp đối số dễ dàng hơn. tốt, không dễ dàng hơn, chính xác. nó vẫn sẽ quá dài dòng đối với sở thích của tôi, nhưng python có argparsecơ sở được tích hợp sẵn.
- 'quy trình con' xấu xí xấu xí. cố gắng xâu chuỗi các lệnh và không kêu lên rằng mã của bạn sẽ trở nên xấu xí như thế nào. đặc biệt nếu bạn quan tâm đến mã thoát.

Bash :
+ ở khắp mọi nơi, như đã nói trước đó, thực sự.
+ chuỗi lệnh đơn giản. đó là cách bạn gắn các lệnh khác nhau lại với nhau một cách đơn giản. Ngoài ra Bash(không sh) có một số cải tiến, như pipefail, vì vậy chuỗi thực sự ngắn và biểu cảm.
+ Không yêu cầu cài đặt chương trình của bên thứ 3. có thể được thực hiện ngay lập tức.
- chúa ơi, nó đầy những món ngon. IFS, CDPATH .. hàng ngàn người trong số họ.

Nếu một người viết một tập lệnh lớn hơn 100 LOC: hãy chọn Python
Nếu một người cần thao tác đường dẫn trong tập lệnh: hãy chọn Python (3)
Nếu một người cần hơi giống aliasnhưng hơi phức tạp: hãy chọn Bash / sh

Dù sao, người ta nên thử cả hai bên để biết họ có khả năng gì.

Có lẽ câu trả lời có thể được mở rộng với bao bì và các điểm hỗ trợ IDE, nhưng tôi không quen với các mặt này.

Như mọi khi, bạn phải chọn từ bánh mì kẹp củ cải và miếng chà bông khổng lồ. Và hãy nhớ rằng, chỉ vài năm trước Perl là niềm hy vọng mới. Bây giờ nó đang ở đâu.


4
Vâng, một mã với bash tồn tại mãi mãi. Tôi đã code rất nhiều Perl, giờ chúng vô dụng.
Raymond gsh

Chỉ để xem ... Tập lệnh lớn nhất hiện tại mà tôi đã viết, mà tôi sử dụng hàng ngày, nặng 4121 dòng mã bash thực tế, không bình luận hoặc dòng trống. Với các bình luận rộng rãi và như vậy, làm cho nó 7261 dòng. Nó được đi kèm với một tệp trợ giúp gồm các tài liệu giống như manpage cho mọi chức năng là 6650 dòng khác. Mỗi chức năng đều có một tùy chọn có thể truy xuất và hiển thị ngay lập tức văn bản trợ giúp của nó ở dạng đầu ra tốt nhất hiện có bao gồm 3 phiên bản YAD, Zenity, hộp thoại hoặc chỉ văn bản CLI thuần túy. Tôi gọi nó là 'bộ'. nó trên phiên bản 44 kể từ khi viết bài này.
DocSalvager

Thật là nặng! (c)
vigilancer,

1
Tôi không nghĩ LoC thực sự là yếu tố quyết định để chọn Python. Hơn nữa, nhiệm vụ bạn đang làm phức tạp đến mức nào? Nếu bạn chỉ xâu chuỗi 100 lệnh thì có lẽ ổn, nếu chỉ 30 LoC trong bash nhưng có thể dễ hiểu hơn trong Python - hãy sử dụng python.
JFord

@Akito thì không sao, khi không có gì chạm vào nó. nhưng vẫn có một vài tình huống mà mọi thứ có thể diễn ra không như ý muốn. bạn đặt nó thành không mặc định và quên xóa nó. một cái gì đó bên ngoài đã thay đổi nó nhưng tập lệnh của bạn dựa vào mặc định, v.v. người ta luôn phải ghi nhớ IFS, vì một số công cụ đang ngầm sử dụng nó.
vigilancer

22

Bash hiệu suất vượt trội hơn python trong thời gian khởi động quy trình.

Dưới đây là một số phép đo từ máy tính xách tay core i7 chạy Linux Mint của tôi:

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

* Các lib được tải trong Python là: os, os.path, json, time, request, threading, subprocess

Điều này cho thấy một sự khác biệt rất lớn tuy nhiên thời gian thực thi bash giảm nhanh chóng nếu nó phải làm bất cứ điều gì hợp lý vì nó thường phải gọi các quy trình bên ngoài.

Nếu bạn quan tâm đến hiệu suất, hãy chỉ sử dụng bash cho:

  • tập lệnh thực sự đơn giản và thường được gọi là
  • tập lệnh chủ yếu gọi các quy trình khác
  • khi bạn cần ít ma sát giữa các thao tác quản trị thủ công và tập lệnh - hãy kiểm tra nhanh một vài lệnh và đặt chúng vào tệp.sh

... và /bin/echovượt trội so với bash ở mức độ lớn như vậy, rất khó để đo lường. Vì vậy, thay vì chạy bash, bạn có thể sử dụng /bin/echo mycommand > named_pipe(xuất các lệnh / thông báo đến một đường ống hoặc ổ cắm được đặt tên) ... và có một quy trình Python nền đọc các lệnh / hướng dẫn từ đường ống đó và chạy chúng. Vì vậy, bash không thực sự là một "tối ưu hóa chi phí khởi động" tốt.
Cezary Baginski

Thông thường, bạn phải sử dụng các luồng thay vì các quy trình khi nhiệm vụ thực sự ngắn và nhanh chóng. Nhiều quy trình là một thứ cấp cao và miễn là bắt đầu một quy trình trong vòng nửa giây, điều đó có vẻ khá hợp lý đối với hầu hết các phần, bạn có nói vậy không?
Timothy Swan

16

Bash chủ yếu là một ngôn ngữ kịch bản batch / shell với ít hỗ trợ hơn cho các kiểu dữ liệu khác nhau và tất cả các loại câu hỏi xung quanh cấu trúc điều khiển - chưa kể đến các vấn đề tương thích.

Cái nào nhanh hơn? Cũng không, bởi vì bạn không so sánh táo với táo ở đây. Nếu bạn phải sắp xếp một tệp văn bản ascii và bạn đang sử dụng các công cụ như zcat, sort, uniq và sed thì bạn sẽ thấy hiệu suất Python khôn ngoan.

Tuy nhiên, nếu bạn cần một môi trường lập trình thích hợp hỗ trợ dấu chấm động và nhiều luồng điều khiển, thì Python sẽ thắng. Nếu bạn đã viết một thuật toán đệ quy bằng Bash và Python, thì phiên bản Python sẽ thắng theo thứ tự độ lớn hoặc hơn.


13
Vì vậy, toàn bộ đạo lý của tôi là: sử dụng đúng công cụ cho đúng công việc.
Justin

2
Dấu phẩy động được hỗ trợ với các công cụ như awk, bc và với các shell như zsh / ksh, vậy tại sao bạn lại nói Python thắng?
ghostdog 74

4
Bởi vì những công cụ đó không phải là Bash. Tôi đã chỉ ra một sự khác biệt rõ ràng. Những công cụ đó được sử dụng trong một tập lệnh shell, nhưng bản thân Bash gốc không hỗ trợ dấu phẩy động.
Justin

2
Không. Hãy tự mình thử. gzip một tệp nhật ký lớn và sử dụng zcat, sort, v.v. để thực hiện một số lọc và sau đó sử dụng các libs Python bản địa. Nó nhanh hơn đáng kể bằng cách sử dụng các công cụ gốc.
Justin

6
@justin, vâng, những công cụ này không phải là Bash nhưng chúng đã có từ thời cổ đại và thường được sử dụng trong kịch bản shell. nếu bạn muốn dấu phẩy động, hãy sử dụng awk / bc. Sự kết hợp của các công cụ này làm cho kịch bản shell cũng mạnh mẽ như Python.
ghostdog 74

12

Nếu bạn đang tìm cách kết hợp một tiện ích nhanh chóng với nỗ lực tối thiểu, bash là tốt. Đối với một ứng dụng hoàn chỉnh, bash là vô giá.

Bất cứ điều gì có thể khiến bạn quay lại nhiều lần để bổ sung các cải tiến có lẽ (mặc dù không phải lúc nào) sẽ phù hợp hơn với một ngôn ngữ như Python vì mã Bash bao gồm hơn 1000 dòng sẽ rất khó bảo trì. Mã bash cũng khó gỡ lỗi khi nó dài .......

Theo kinh nghiệm của tôi, một phần của vấn đề với những câu hỏi kiểu này là các script shell thường là tất cả các tác vụ tùy chỉnh. Có rất ít tác vụ kịch bản shell mà tôi đã gặp khi đã có sẵn một giải pháp miễn phí.


8

Tôi tin rằng có 2 kịch bản mà hiệu suất Bash ít nhất bằng nhau:

  • Viết mã các tiện ích dòng lệnh
  • Các tập lệnh chỉ mất một thời gian ngắn để thực thi; trong đó việc khởi động trình thông dịch Python mất nhiều thời gian hơn chính hoạt động

Điều đó nói rằng, tôi thường không thực sự quan tâm đến hiệu suất của chính ngôn ngữ kịch bản. Nếu hiệu suất là một vấn đề thực sự, bạn không viết kịch bản mà lập trình (có thể bằng Python).


4

Tôi đăng câu trả lời muộn này chủ yếu vì Google thích câu hỏi này.

Tôi tin rằng vấn đề và bối cảnh thực sự nên là về quy trình làm việc, không phải là các công cụ. Triết lý tổng thể luôn là "Sử dụng đúng công cụ cho công việc." Nhưng trước khi điều này xảy ra, một điều mà nhiều người thường quên khi họ bị lạc trong các công cụ: "Hoàn thành công việc."

Khi tôi gặp một vấn đề chưa được xác định hoàn toàn, tôi hầu như luôn bắt đầu với Bash. Tôi đã giải quyết một số vấn đề gnarly trong các tập lệnh Bash lớn vừa có thể đọc được vừa có thể bảo trì.

Nhưng khi nào vấn đề bắt đầu vượt quá những gì Bash nên được yêu cầu làm? Tôi có một số séc tôi sử dụng để cảnh báo:

  1. Tôi có muốn Bash có mảng 2D (hoặc cao hơn) không? Nếu có, đã đến lúc nhận ra rằng Bash không phải là một ngôn ngữ xử lý dữ liệu tuyệt vời.
  2. Tôi có đang thực hiện nhiều công việc chuẩn bị dữ liệu cho các tiện ích khác hơn là tôi đang thực sự chạy các tiện ích đó không? Nếu có, hãy một lần nữa nhận ra Bash không phải là một ngôn ngữ xử lý dữ liệu tuyệt vời.
  3. Có phải kịch bản của tôi quá lớn để quản lý không? Nếu có, điều quan trọng là phải nhận ra rằng mặc dù Bash có thể nhập các thư viện tập lệnh, nhưng nó lại thiếu một hệ thống gói như các ngôn ngữ khác. Nó thực sự là một ngôn ngữ "cuộn của riêng bạn" so với hầu hết những ngôn ngữ khác. Sau đó, một lần nữa, nó có một lượng lớn chức năng được tích hợp sẵn (một số người nói quá nhiều ...)

Danh sách cứ kéo dài. Tóm lại, khi bạn đang làm việc chăm chỉ hơn để giữ cho các tập lệnh của mình chạy mà bạn thực hiện thêm các tính năng, thì đã đến lúc rời khỏi Bash.

Giả sử bạn đã quyết định chuyển công việc của mình sang Python. Nếu tập lệnh Bash của bạn sạch, quá trình chuyển đổi ban đầu khá đơn giản. Thậm chí có một số trình chuyển đổi / dịch giả sẽ thực hiện bước đầu tiên cho bạn.

Câu hỏi tiếp theo là: Bạn từ bỏ điều gì khi chuyển sang Python?

  1. Tất cả các cuộc gọi đến các tiện ích bên ngoài phải được gói trong một cái gì đó từ subprocessmô-đun (hoặc tương đương). Có nhiều cách để làm điều này, và cho đến ngày 3.7 phải mất một số nỗ lực để làm đúng (3.7 được cải tiến subprocess.run()để tự xử lý tất cả các trường hợp phổ biến).

  2. Đáng ngạc nhiên là Python không có tiện ích không chặn độc lập với nền tảng tiêu chuẩn (có thời gian chờ) để thăm dò bàn phím (stdin). Lệnh Bash readlà một công cụ tuyệt vời để tương tác với người dùng đơn giản. Cách sử dụng phổ biến nhất của tôi là hiển thị một con quay cho đến khi người dùng nhấn một phím, đồng thời chạy chức năng thăm dò (với mỗi bước con quay) để đảm bảo mọi thứ vẫn chạy tốt. Đây là một vấn đề khó hơn so với lúc đầu, vì vậy tôi thường đơn giản gọi cho Bash: Đắt, nhưng nó thực hiện chính xác những gì tôi cần.

  3. Nếu bạn đang phát triển trên một hệ thống được nhúng hoặc có giới hạn bộ nhớ, dấu vết bộ nhớ của Python có thể lớn hơn Bash nhiều lần (tùy thuộc vào nhiệm vụ hiện tại). Thêm vào đó, hầu như luôn có một phiên bản Bash đã có trong bộ nhớ, điều này có thể không đúng với Python.

  4. Đối với các tập lệnh chạy một lần và thoát nhanh, thời gian khởi động của Python có thể lâu hơn nhiều so với Bash. Nhưng nếu tập lệnh chứa các phép tính quan trọng, Python sẽ nhanh chóng vượt lên.

  5. Python có hệ thống gói toàn diện nhất trên hành tinh. Khi Bash thậm chí còn hơi phức tạp, Python có thể có một gói làm cho toàn bộ phần Bash trở thành một lệnh gọi duy nhất. Tuy nhiên, tìm (các) gói phù hợp để sử dụng là phần lớn nhất và khó khăn nhất khi trở thành Pythonista. May mắn thay, Google và StackExchange là bạn của bạn.


2

Tôi không biết điều này có chính xác hay không, nhưng tôi nhận thấy rằng python / ruby ​​hoạt động tốt hơn nhiều đối với các tập lệnh có nhiều tính toán toán học. Nếu không bạn phải sử dụngdc hoặc một số "máy tính chính xác tùy ý". Nó chỉ trở thành một nỗi đau rất lớn. Với python, bạn có nhiều quyền kiểm soát hơn đối với float và ints và đôi khi thực hiện nhiều phép tính sẽ dễ dàng hơn nhiều.

Đặc biệt, tôi sẽ không bao giờ làm việc với một tập lệnh bash để xử lý thông tin hoặc byte nhị phân. Thay vào đó, tôi sẽ sử dụng một cái gì đó như python (có thể) hoặc C ++ hoặc thậm chí Node.JS.


Số học Bash là số nguyên hoàn toàn nên bạn phải thực hiện các phép toán dấu phẩy động bằng cách gọi một thứ gì đó khác (như awk hoặc dc) và nắm bắt kết quả từ nó. Những thứ đơn giản về tiền tệ thường có thể được thực hiện trong nội bộ chỉ bằng cách nhân với 100 và điều chỉnh dấu thập phân trong đầu ra.
DocSalvager

0

Hiệu suất khôn ngoan cả hai đều có thể làm như nhau, vì vậy câu hỏi đặt ra là cái nào tiết kiệm thời gian phát triển hơn?

Bash dựa vào việc gọi các lệnh khác và chuyển chúng để tạo các lệnh mới. Điều này có lợi thế là bạn có thể nhanh chóng tạo các chương trình mới chỉ với mã mượn từ người khác, bất kể họ sử dụng ngôn ngữ lập trình nào.

Điều này cũng có tác dụng phụ là chống lại sự thay đổi trong các lệnh con khá tốt, vì giao diện giữa chúng chỉ là văn bản thuần túy.

Ngoài ra, Bash rất dễ dãi về cách bạn có thể viết trên đó. Điều này có nghĩa là nó sẽ hoạt động tốt cho nhiều ngữ cảnh hơn, nhưng nó cũng phụ thuộc vào việc lập trình viên có ý định mã hóa theo cách an toàn sạch sẽ. Nếu không thì Bash sẽ không ngăn bạn xây dựng một mớ hỗn độn.

Python có cấu trúc hơn về phong cách, vì vậy một lập trình viên lộn xộn sẽ không lộn xộn như vậy. Nó cũng sẽ hoạt động trên các hệ điều hành bên ngoài Linux, làm cho nó ngay lập tức phù hợp hơn nếu bạn cần loại tính di động đó.

Nhưng nó không đơn giản để gọi các lệnh khác. Vì vậy, nếu hệ điều hành của bạn là Unix thì rất có thể bạn sẽ thấy rằng phát triển trên Bash là cách nhanh nhất để phát triển.

Khi nào sử dụng Bash:

  • Đó là một chương trình không đồ họa, hoặc động cơ của một chương trình đồ họa.
  • Nó chỉ dành cho Unix.

Khi nào sử dụng Python:

  • Đó là một chương trình đồ họa.
  • Nó sẽ hoạt động trên Windows.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.