Jelas Python lebih ramah pengguna, pencarian cepat di google menunjukkan banyak hasil yang mengatakan bahwa, karena Python dikompilasi byte biasanya lebih cepat. Saya bahkan menemukan ini yang mengklaim bahwa Anda dapat melihat peningkatan lebih dari 2000% pada operasi berbasis kamus.
Apa pengalaman Anda tentang masalah ini? Dalam jenis tugas apa masing-masing merupakan pemenang yang jelas?
python
performance
bash
Serupa
sumber
sumber
Jawaban:
Aliran mainframe tipikal ...
Aliran Linux yang khas ...
Kerang adalah perekat Linux
Kerang Linux seperti sh / ksh / bash / ... menyediakan fasilitas penunjukan input / output / flow-control seperti Mainframe Job Control Language yang lama ... tetapi pada steroid! Mereka adalah bahasa Turing lengkap dengan hak mereka sendiri sementara dioptimalkan untuk secara efisien meneruskan data dan kontrol ke dan dari proses pelaksana lain yang ditulis dalam bahasa apa pun yang didukung O / S.
Sebagian besar aplikasi Linux, terlepas dari bahasa apa sebagian besar program itu ditulis, bergantung pada skrip shell dan Bash telah menjadi yang paling umum. Mengklik ikon di desktop biasanya menjalankan skrip Bash pendek . Skrip itu, baik secara langsung atau tidak langsung, mengetahui di mana semua file yang dibutuhkan berada dan menetapkan variabel dan parameter baris perintah, akhirnya memanggil program. Itu penggunaan shell yang paling sederhana.
Namun Linux seperti yang kita kenal tidak akan menjadi Linux tanpa ribuan skrip shell yang memulai sistem, menanggapi peristiwa, mengontrol prioritas eksekusi dan mengkompilasi, mengkonfigurasi dan menjalankan program. Banyak di antaranya cukup besar dan kompleks.
Shells menyediakan infrastruktur yang memungkinkan kita menggunakan komponen yang dibuat sebelumnya yang ditautkan bersama pada waktu proses daripada waktu kompilasi. Komponen tersebut adalah program yang berdiri sendiri dengan sendirinya yang dapat digunakan sendiri atau dalam kombinasi lain tanpa kompilasi ulang. Sintaks untuk memanggil mereka tidak dapat dibedakan dari perintah Bash builtin, dan pada kenyataannya ada banyak perintah builtin yang juga dapat dieksekusi sendiri pada sistem, seringkali memiliki opsi tambahan.
Tidak ada perbedaan bahasa secara luas antara Python dan Bash dalam performa. Ini sepenuhnya tergantung pada bagaimana masing-masing dikodekan dan alat eksternal mana yang dipanggil.
Salah satu alat terkenal seperti awk, sed, grep, bc, dc, tr, dll. Akan berhenti melakukan operasi tersebut dalam bahasa apa pun. Bash kemudian lebih disukai untuk apa pun tanpa antarmuka pengguna grafis karena lebih mudah dan lebih efisien untuk memanggil dan meneruskan data kembali dari alat seperti yang ada pada Bash daripada Python .
Performa
Itu tergantung pada program mana yang dipanggil skrip shell Bash dan kesesuaiannya untuk subtugas yang diberikan, apakah keseluruhan throughput dan / atau daya tanggap akan lebih baik atau lebih buruk daripada Python yang setara . Untuk memperumit masalah Python , seperti kebanyakan bahasa, juga dapat memanggil executable lain, meskipun lebih rumit dan karenanya tidak sering digunakan.
Antarmuka pengguna
Satu area di mana Python adalah pemenangnya adalah antarmuka pengguna. Itu membuatnya menjadi bahasa yang sangat baik untuk membangun aplikasi lokal atau klien-server karena secara native mendukung grafik GTK dan jauh lebih intuitif daripada Bash .
Bash hanya mengerti teks. Alat lain harus dipanggil untuk GUI dan data dikirimkan kembali dari mereka. Sebuah Python Script adalah salah satu pilihan. Opsi yang lebih cepat tetapi kurang fleksibel adalah binari seperti YAD, Zenity, dan GTKDialog .
Sementara shell seperti Bash bekerja dengan baik dengan GUI seperti Yad , GtkDialog (antarmuka seperti XML yang disematkan ke fungsi GTK +) , dialog , dan xmessage , Python jauh lebih mumpuni dan lebih baik untuk jendela GUI yang kompleks.
Ringkasan
Membangun dengan skrip shell seperti merakit komputer dengan komponen off-the-shelf seperti PC desktop.
Membangun dengan Python , C ++ atau sebagian besar bahasa lain lebih seperti membangun komputer dengan menyolder chip (perpustakaan) dan komponen elektronik lainnya bersama-sama seperti halnya smartphone.
Hasil terbaik biasanya diperoleh dengan menggunakan kombinasi bahasa di mana masing-masing dapat melakukan yang terbaik. Salah satu pengembang menyebut ini " pemrograman poliglot ".
sumber
Secara umum, bash bekerja lebih baik daripada python hanya di lingkungan di mana python tidak tersedia. :)
Serius, saya harus berurusan dengan kedua bahasa setiap hari, dan akan menggunakan python secara instan melalui bash jika diberi pilihan. Sayangnya, saya terpaksa menggunakan bash pada platform "kecil" tertentu karena seseorang (secara keliru, IMHO) telah memutuskan bahwa python "terlalu besar" untuk muat.
Meskipun benar bahwa bash mungkin lebih cepat daripada python untuk beberapa tugas tertentu, bash tidak pernah bisa secepatnya untuk dikembangkan, atau semudah untuk dipelihara (setidaknya setelah Anda melewati 10 baris kode atau lebih). Satu-satunya keunggulan Bash wrt python atau ruby atau lua, dll., Adalah keberadaannya di mana-mana.
sumber
os
ataushutil
modul.Efisiensi pengembang jauh lebih penting bagi saya dalam skenario di mana bash dan Python adalah pilihan yang masuk akal.
Beberapa tugas cocok untuk di-bash, dan lainnya untuk Python. Juga bukan hal yang aneh bagi saya untuk memulai sesuatu sebagai skrip bash dan mengubahnya menjadi Python saat berkembang selama beberapa minggu.
Keuntungan besar yang dimiliki Python adalah dalam kasus sudut sekitar penanganan nama file, sementara ia memiliki glob , shutil , subprocess , dan lainnya untuk kebutuhan skrip umum.
sumber
Saat Anda menulis skrip kinerja tidak masalah (dalam banyak kasus).
Jika Anda peduli dengan kinerja 'Python vs Bash' adalah pertanyaan yang salah.
Python :
+ lebih mudah untuk menulis
+ lebih mudah untuk memelihara
+ kode yang lebih mudah digunakan kembali (coba temukan cara universal yang tahan kesalahan untuk memasukkan file dengan kode umum
sh
, saya tantang Anda)+ Anda juga dapat melakukan OOP dengannya!
+ parsing argumen yang lebih mudah. yah, tidak lebih mudah, tepatnya. itu masih akan terlalu bertele-tele menurut selera saya, tetapi python memiliki
argparse
fasilitas built in- 'subprocess' jelek jelek. mencoba untuk merangkai perintah dan tidak menangis sungai betapa jeleknya kode Anda nantinya. terutama jika Anda peduli dengan kode keluar.
Bash :
+ di mana-mana, seperti yang dikatakan sebelumnya, memang.
+ rangkaian perintah sederhana. begitulah cara Anda merekatkan berbagai perintah dengan cara yang sederhana. Juga
Bash
(tidaksh
) ada beberapa peningkatan, sepertipipefail
, jadi rangkaian sangat pendek dan ekspresif.+ tidak memerlukan penginstalan program pihak ketiga. dapat langsung dijalankan.
- Tuhan, itu penuh dengan gotcha. IFS, CDPATH .. ribuan dari mereka.
Jika seseorang menulis skrip lebih besar dari 100 LOC: pilih Python
Jika seseorang membutuhkan manipulasi jalur dalam skrip: pilih Python (3)
Jika ada yang membutuhkan seperti
alias
tapi sedikit rumit: pilih Bash / shBagaimanapun, seseorang harus mencoba kedua sisi untuk mendapatkan ide tentang apa yang mereka mampu.
Mungkin jawaban dapat diperpanjang dengan pengemasan dan poin dukungan IDE, tetapi saya tidak terbiasa dengan sisi ini.
Seperti biasa, Anda harus memilih dari sandwich kotoran dan douche raksasa. Dan ingat, beberapa tahun lalu Perl adalah harapan baru. Dimana sekarang.
sumber
Performa bash mengungguli python dalam proses waktu startup.
Berikut beberapa pengukuran dari laptop core i7 saya yang menjalankan Linux Mint:
* Libs yang dimuat Python adalah: os, os.path, json, time, request, threading, subprocess
Hal ini menunjukkan perbedaan besar namun waktu eksekusi bash menurun dengan cepat jika harus melakukan sesuatu yang masuk akal karena biasanya harus memanggil proses eksternal.
Jika Anda peduli dengan kinerja, gunakan bash hanya untuk:
sumber
/bin/echo
mengungguli pesta sebesar itu, sulit untuk diukur. Jadi, alih-alih menjalankan bash, Anda dapat menggunakan/bin/echo mycommand > named_pipe
(perintah / pesan keluaran ke pipa atau soket bernama) ... dan memiliki latar belakang proses Python membaca perintah / instruksi dari pipa itu dan menjalankannya. Jadi bash bukanlah "pengoptimalan biaya awal" yang baik.Bash pada dasarnya adalah bahasa skrip batch / shell dengan dukungan yang jauh lebih sedikit untuk berbagai tipe data dan semua jenis kebiasaan di sekitar struktur kontrol - belum lagi masalah kompatibilitas.
Mana yang lebih cepat? Tidak juga, karena Anda tidak membandingkan apel dengan apel di sini. Jika Anda harus mengurutkan file teks ascii dan Anda menggunakan alat seperti zcat, sort, uniq, dan sed maka Anda akan mengasapi kinerja Python dengan bijaksana.
Namun, jika Anda membutuhkan lingkungan pemrograman yang tepat yang mendukung floating point dan berbagai aliran kontrol, maka Python menang telak. Jika Anda menulis katakanlah algoritme rekursif di Bash dan Python, versi Python akan menang dalam urutan besarnya atau lebih.
sumber
Jika Anda ingin menggabungkan utilitas cepat dengan sedikit usaha, bash bagus. Untuk pembungkus sebuah aplikasi, bash sangat berharga.
Apa pun yang mungkin membuat Anda berulang kali menambahkan peningkatan mungkin (meskipun tidak selalu) lebih cocok untuk bahasa seperti Python karena kode Bash yang terdiri lebih dari 1000 baris menjadi sangat sulit untuk dipertahankan. Kode Bash juga mengganggu untuk di-debug ketika menjadi panjang .......
Bagian dari masalah dengan pertanyaan semacam ini adalah, dari pengalaman saya, bahwa skrip shell biasanya merupakan tugas khusus. Ada sangat sedikit tugas skrip shell yang saya temui di mana sudah ada solusi yang tersedia secara gratis.
sumber
Ada 2 skenario di mana kinerja Bash setidaknya sama saya percaya:
Karena itu, saya biasanya tidak terlalu memperhatikan kinerja bahasa skrip itu sendiri. Jika kinerja adalah masalah nyata Anda tidak membuat skrip tetapi program (mungkin dengan Python).
sumber
Saya memposting jawaban yang terlambat ini terutama karena Google menyukai pertanyaan ini.
Saya yakin masalah dan konteks seharusnya tentang alur kerja, bukan alatnya. Filosofi keseluruhan selalu "Gunakan alat yang tepat untuk pekerjaan itu." Tetapi sebelum ini datang, satu hal yang sering dilupakan ketika mereka tersesat di alat: "Selesaikan pekerjaan."
Ketika saya memiliki masalah yang tidak sepenuhnya ditentukan, saya hampir selalu memulai dengan Bash. Saya telah memecahkan beberapa masalah besar dalam skrip Bash besar yang dapat dibaca dan dipelihara.
Tetapi kapan masalahnya mulai melebihi apa yang harus diminta Bash? Saya memiliki beberapa pemeriksaan yang saya gunakan untuk memberi saya peringatan:
Daftarnya terus berlanjut. Intinya, ketika Anda bekerja lebih keras untuk menjaga skrip Anda tetap berjalan yang Anda lakukan menambahkan fitur, inilah saatnya untuk meninggalkan Bash.
Anggaplah Anda telah memutuskan untuk memindahkan pekerjaan Anda ke Python. Jika skrip Bash Anda bersih, konversi awal cukup mudah. Bahkan ada beberapa konverter / penerjemah yang akan melakukan pass pertama untuk Anda.
Pertanyaan selanjutnya adalah: Apa yang Anda berhenti pindah ke Python?
Semua panggilan ke utilitas eksternal harus dibungkus dengan sesuatu dari
subprocess
modul (atau yang setara). Ada banyak cara untuk melakukan ini, dan hingga 3,7 perlu beberapa upaya untuk memperbaikinya (3,7 ditingkatkansubprocess.run()
untuk menangani semua kasus umum sendiri).Anehnya, Python tidak memiliki utilitas non-pemblokiran platform-independen standar (dengan batas waktu) untuk polling keyboard (stdin).
read
Perintah Bash adalah alat yang luar biasa untuk interaksi pengguna yang sederhana. Penggunaan saya yang paling umum adalah untuk menampilkan pemintal hingga pengguna menekan tombol, sementara juga menjalankan fungsi polling (dengan setiap langkah pemintal) untuk memastikan semuanya masih berjalan dengan baik. Ini adalah masalah yang lebih sulit daripada yang terlihat pada awalnya, jadi saya sering hanya menelepon ke Bash: Mahal, tapi itu melakukan apa yang saya butuhkan.Jika Anda mengembangkan pada sistem yang disematkan atau dengan memori terbatas, jejak memori Python bisa berkali-kali lebih besar daripada milik Bash (tergantung pada tugas yang ada). Selain itu, hampir selalu ada contoh Bash yang sudah ada di memori, yang mungkin tidak terjadi pada Python.
Untuk skrip yang berjalan sekali dan keluar dengan cepat, waktu startup Python bisa lebih lama daripada Bash. Tetapi jika skrip berisi perhitungan yang signifikan, Python dengan cepat melangkah maju.
Python memiliki sistem paket terlengkap di planet ini. Ketika Bash menjadi sedikit rumit, Python mungkin memiliki paket yang membuat seluruh bagian Bash menjadi satu panggilan. Namun, menemukan paket yang tepat untuk digunakan adalah bagian terbesar dan paling menakutkan untuk menjadi seorang Pythonista. Untungnya, Google dan StackExchange adalah teman Anda.
sumber
Saya tidak tahu apakah ini akurat, tetapi saya telah menemukan bahwa python / ruby bekerja jauh lebih baik untuk skrip yang memiliki banyak perhitungan matematis. Jika tidak, Anda harus menggunakan
dc
atau "kalkulator presisi sewenang-wenang" lainnya. Itu hanya menjadi rasa sakit yang sangat besar. Dengan python Anda memiliki lebih banyak kendali atas floats vs ints dan jauh lebih mudah untuk melakukan banyak komputasi dan terkadang.Secara khusus, saya tidak akan pernah bekerja dengan skrip bash untuk menangani informasi biner atau byte. Sebagai gantinya saya akan menggunakan sesuatu seperti python (mungkin) atau C ++ atau bahkan Node.JS.
sumber
Dari segi kinerja, keduanya dapat melakukan hal yang sama, jadi pertanyaannya menjadi mana yang lebih menghemat waktu pengembangan?
Bash mengandalkan memanggil perintah lain, dan menyalurkannya untuk membuat yang baru. Ini memiliki keuntungan bahwa Anda dapat dengan cepat membuat program baru hanya dengan kode yang dipinjam dari orang lain, tidak peduli bahasa pemrograman apa yang mereka gunakan.
Ini juga memiliki efek samping menahan perubahan dalam sub-perintah dengan cukup baik, karena antarmuka di antara mereka hanyalah teks biasa.
Selain itu Bash sangat permisif tentang bagaimana Anda dapat menulis di atasnya. Ini berarti ini akan bekerja dengan baik untuk variasi konteks yang lebih luas, tetapi juga bergantung pada pemrogram yang bermaksud untuk membuat kode dengan cara yang bersih dan aman. Jika tidak, Bash tidak akan menghentikan Anda untuk membuat kekacauan.
Python lebih terstruktur pada gaya, jadi programmer yang berantakan tidak akan menjadi berantakan. Ini juga akan bekerja pada sistem operasi di luar Linux, membuatnya langsung lebih sesuai jika Anda membutuhkan portabilitas semacam itu.
Tetapi tidak sesederhana untuk memanggil perintah lain. Jadi, jika sistem operasi Anda adalah Unix, kemungkinan besar Anda akan menemukan bahwa mengembangkan di Bash adalah cara tercepat untuk berkembang.
Kapan menggunakan Bash:
Kapan menggunakan Python:
sumber