Python vs Bash - Bei welchen Aufgaben übertrifft jeder den anderen in Bezug auf die Leistung?

97

Offensichtlich ist Python benutzerfreundlicher. Eine schnelle Suche bei Google zeigt viele Ergebnisse, die besagen, dass Python in Byte-Kompilierung normalerweise schneller ist. Ich fand auch dies , dass behauptet , dass Sie eine Verbesserung von über 2000% auf Wörterbuch-basierten Operationen zu sehen.

Welche Erfahrungen haben Sie in dieser Angelegenheit gemacht? In welcher Art von Aufgabe ist jeder ein klarer Gewinner?

Doppelgänger
quelle
6
Dies ist eigentlich keine Umfrage, es gibt keine vordefinierten Optionen. Ich brauche einen Einblick, welches Tool welche Art von Arbeit am besten erledigt.
Doppelgänger

Antworten:

94

Typischer Mainframe-Fluss ...

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

Typischer Linux-Flow ...

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

Shells sind der Klebstoff von Linux

Linux-Shells wie sh / ksh / bash / ... bieten Eingabe- / Ausgabe- / Flusssteuerungs-Bezeichnungsfunktionen, ähnlich wie die alte Mainframe-Jobsteuerungssprache ... aber auf Steroiden! Sie sind Turing komplette Sprachen erstellen eigenständige und sind optimiert, um Daten und Kontrolle effizient an und von anderen ausführenden Prozessen weiterzuleiten, die in einer beliebigen Sprache geschrieben sind, die das Betriebssystem unterstützt.

Die meisten Linux-Anwendungen, unabhängig davon, in welcher Sprache der Großteil des Programms geschrieben ist, hängen von Shell-Skripten ab, und Bash ist die am häufigsten verwendete. Durch Klicken auf ein Symbol auf dem Desktop wird normalerweise ein kurzes Bash- Skript ausgeführt. Dieses Skript weiß entweder direkt oder indirekt, wo sich alle benötigten Dateien befinden, legt Variablen und Befehlszeilenparameter fest und ruft schließlich das Programm auf. Das ist die einfachste Verwendung einer Shell.

Linux, wie wir es kennen, wäre jedoch kaum Linux ohne die Tausenden von Shell-Skripten, die das System starten, auf Ereignisse reagieren, Ausführungsprioritäten steuern und Programme kompilieren, konfigurieren und ausführen. Viele davon sind ziemlich groß und komplex.

Shells bieten eine Infrastruktur, mit der wir vorgefertigte Komponenten verwenden können, die zur Laufzeit miteinander verbunden sind, anstatt zur Kompilierungszeit. Diese Komponenten sind eigenständige Programme, die allein oder in anderen Kombinationen ohne Neukompilierung verwendet werden können. Die Syntax zum Aufrufen ist nicht von der eines eingebauten Bash- Befehls zu unterscheiden, und es gibt tatsächlich zahlreiche eingebaute Befehle, für die es auch eine eigenständige ausführbare Datei auf dem System gibt, die häufig zusätzliche Optionen bietet.

Es gibt keinen sprachweiten Unterschied zwischen Python und Bash in der Leistung. Es hängt ganz davon ab, wie jedes codiert ist und welche externen Tools aufgerufen werden.

Jedes der bekannten Werkzeuge wie awk, sed, grep, bc, dc, tr usw. lässt diese Operationen in beiden Sprachen im Staub liegen. Bash wird dann für alles ohne grafische Benutzeroberfläche bevorzugt, da es einfacher und effizienter ist, Daten von einem Tool wie dem mit Bash als Python aufzurufen und zurückzugeben .

Performance

Es hängt davon ab, welche Programme das Bash- Shell-Skript aufruft und welche Eignung sie für die Unteraufgabe haben, ob der Gesamtdurchsatz und / oder die Reaktionsfähigkeit besser oder schlechter als das entsprechende Python sind . Um die Sache zu verkomplizieren, kann Python , wie die meisten Sprachen, auch andere ausführbare Dateien aufrufen, obwohl es umständlicher ist und daher nicht so häufig verwendet wird.

Benutzeroberfläche

Ein Bereich, in dem Python der klare Gewinner ist, ist die Benutzeroberfläche. Dies macht es zu einer hervorragenden Sprache für die Erstellung lokaler oder Client-Server-Anwendungen, da es GTK-Grafiken nativ unterstützt und weitaus intuitiver als Bash ist .

Bash versteht nur Text. Andere Tools müssen für eine GUI aufgerufen und Daten von ihnen zurückgegeben werden. Ein Python- Skript ist eine Option. Schnellere, aber weniger flexible Optionen sind die Binärdateien wie YAD, Zenity und GTKDialog .

Während Shells wie Bash gut mit GUIs wie Yad , GtkDialog (eingebettete XML-ähnliche Schnittstelle zu GTK + -Funktionen) , Dialog und xmessage funktionieren , ist Python viel leistungsfähiger und daher besser für komplexe GUI-Fenster.

Zusammenfassung

Das Erstellen mit Shell-Skripten ähnelt dem Zusammenstellen eines Computers mit Standardkomponenten wie Desktop-PCs.

Das Bauen mit Python , C ++ oder den meisten anderen Sprachen ähnelt eher dem Bauen eines Computers durch Löten der Chips (Bibliotheken) und anderer elektronischer Teile wie Smartphones.

Die besten Ergebnisse werden normalerweise durch die Verwendung einer Kombination von Sprachen erzielt, in denen jeder das tun kann, was er am besten kann. Ein Entwickler nennt dies " polyglotte Programmierung ".

DocSalvager
quelle
15
Ich erkenne nicht, wie es akzeptiert werden kann. Es gibt keine Aufschluss darüber, für welche Aufgaben diese beiden besser geeignet sind.
Wachsamkeit
2
@vigilancer Ich hoffe, die soeben veröffentlichten Änderungen und Ergänzungen sind hilfreich.
DocSalvager
1
Obwohl ich anderen Kommentaren zustimme, beantwortet dies die Frage nicht genau. Dies ist eine der besten Antworten, die ich je gelesen habe!
Jim Mitchener
72

Im Allgemeinen funktioniert Bash nur in Umgebungen, in denen Python nicht verfügbar ist, besser als Python. :) :)

Im Ernst, ich muss mich täglich mit beiden Sprachen auseinandersetzen und werde Python sofort über Bash nehmen, wenn ich die Wahl habe. Leider bin ich gezwungen, Bash auf bestimmten "kleinen" Plattformen zu verwenden, weil jemand (fälschlicherweise IMHO) entschieden hat, dass Python "zu groß" ist, um zu passen.

Während es stimmt, dass Bash für einige ausgewählte Aufgaben schneller als Python ist, kann es niemals so schnell entwickelt oder gewartet werden (zumindest nachdem Sie 10 Codezeilen oder so überschritten haben). Bashs einzige Stärke in Bezug auf Python oder Rubin oder Lua usw. ist seine Allgegenwart.

Kevin Little
quelle
4
Ist Python nicht schon unter Linux / Unix, auch unter MacOS? Ich bin gespannt, welche Operationen in Bash schneller sind - nach meinem Verständnis ist es durch das Aufrufen verschiedener separater Befehle viel langsamer als Pythons osoder shutilModulbefehle.
NoBugs
1
@ NoBugs Es wäre definitiv nicht auf jeder einzelnen Linux / Unix-Distribution. Es kommt mit ziemlicher Sicherheit auf allen wichtigen Linux-Distributionen (z. B. Debian-basierten Distributionen, Slackware usw.) und Mac OS X vor. Wenn Sie jedoch Ihre eigene ISO mit yocto ( yoctoproject.org ) erstellen , können Sie diese nicht haben Sie passen jedes Paket selbst an. Aber es ist wahrscheinlich sicher zu sagen, dass es heutzutage für jedes größere Unix-Betriebssystem (zumindest) mit Python2 und möglicherweise auch mit Python3 installiert wird.
dylnmc
Python ist eine hervorragende Skriptsprache für komplexe Aufgaben wie eine voll ausgestattete Benutzeroberfläche. Ebenso wichtig ist, dass gute Programmierpraktiken durchgesetzt werden, damit Programme einfacher zu warten sind. Bash erfordert die Einführung bewährter Verfahren, die an anderer Stelle erlernt wurden, um wartbar zu sein. Wenn Sie ein GUI-Dialogdienstprogramm oder Python für die Benutzeroberfläche verwenden, erhalten Sie eine überlegene Leistung (über extrem schnelle Dienstprogramme, die von Bash aufgerufen werden) sowie eine gute Benutzeroberfläche.
DocSalvager
34

Die Entwicklereffizienz ist für mich in Szenarien, in denen sowohl Bash als auch Python eine sinnvolle Wahl sind, viel wichtiger.

Einige Aufgaben eignen sich gut zum Schlagen, andere für Python. Es ist auch nicht ungewöhnlich, dass ich etwas als Bash-Skript starte und es in Python ändere, während es sich über mehrere Wochen entwickelt.

Ein großer Vorteil von Python liegt in Eckfällen in Bezug auf die Behandlung von Dateinamen, während es Glob , Shutil , Subprozess und andere für allgemeine Skriptanforderungen enthält .

Roger Pate
quelle
5
Die Frage zielte auf einen "leistungsbezogenen" Vergleich ab, der die Maschinenleistung und nicht die Entwicklerleistung impliziert. Siehe meine Leistungstests in einer anderen Antwort.
Grzegorz Luczywo
25

Beim Schreiben von Skripten spielt die Leistung keine Rolle (in den meisten Fällen).
Wenn Sie sich für die Leistung interessieren, ist 'Python vs Bash' eine falsche Frage.

Python :
+ einfacher zu schreiben
+ einfacher zu warten
+ einfachere Wiederverwendung von Code (versuchen Sie, einen universellen, fehlerfreien Weg zu finden, um Dateien mit allgemeinem Code aufzunehmen sh, ich wage Sie)
+ Sie können auch OOP damit machen!
+ einfacheres Parsen von Argumenten. Nun, nicht einfacher, genau. es wird immer noch zu wortreich für meinen Geschmack sein, aber Python hat eine argparseeingebaute Einrichtung.
- hässlicher hässlicher "Unterprozess". Versuchen Sie, Befehle zu verketten und keinen Fluss zu weinen, wie hässlich Ihr Code wird. vor allem, wenn Sie sich für Exit-Codes interessieren.

Bash :
+ Allgegenwart, wie bereits gesagt.
+ einfache Verkettung von Befehlen. So kleben Sie auf einfache Weise verschiedene Befehle zusammen. Auch Bash(nicht sh) haben einige Verbesserungen, wie pipefail, so dass die Verkettung wirklich kurz und ausdrucksstark ist.
+ Es müssen keine Programme von Drittanbietern installiert werden. kann sofort ausgeführt werden.
- Gott, es ist voller Fallstricke. IFS, CDPATH .. Tausende von ihnen.

Wenn Sie ein Skript schreiben, das größer als 100 LOC ist: Wählen Sie Python.
Wenn Sie eine Pfadmanipulation im Skript benötigen: Wählen Sie Python. (3)
Wenn Sie etwas Ähnliches, aliasaber etwas Kompliziertes benötigen : Wählen Sie Bash / sh

Auf jeden Fall sollte man beide Seiten versuchen, sich ein Bild davon zu machen, wozu sie fähig sind.

Vielleicht kann die Antwort mit Verpackungs- und IDE-Unterstützungspunkten erweitert werden, aber ich bin mit diesen Seiten nicht vertraut.

Wie immer muss man zwischen Turd Sandwich und Riesendusche wählen. Und denken Sie daran, vor ein paar Jahren war Perl eine neue Hoffnung. Wo es jetzt ist.

Wachsamkeit
quelle
4
Ja, ein Code mit Bash lebt für immer. Ich habe viel Perl codiert, sie sind jetzt nutzlos.
Raymond gsh
Nur zur Perspektive ... Das derzeit größte Skript, das ich geschrieben habe und das ich jeden Tag den ganzen Tag verwende, wiegt 4121 Zeilen tatsächlichen, nicht kommentierten oder leeren Zeilen-Bash-Codes. Mit den umfangreichen Kommentaren und so macht es 7261 Zeilen. Es wird von einer Hilfedatei mit manpage-ähnlichen Dokumenten für jede Funktion begleitet, die weitere 6650 Zeilen umfasst. Jede Funktion verfügt über eine Option, mit der der Hilfetext sofort in der besten verfügbaren Ausgabeform abgerufen und angezeigt werden kann, die derzeit 3 ​​Versionen von YAD, Zenity, Dialog oder einfach nur CLI-Text enthält. Ich nenne es "Kit". Es ist auf Version 44 zum Zeitpunkt dieses Schreibens.
DocSalvager
Das ist schwer! (c)
Wachsamkeit
1
Ich denke nicht, dass LoC wirklich der entscheidende Faktor für Python ist. Wie komplex ist Ihre Aufgabe? Wenn Sie nur 100 Befehle verketten, ist das wahrscheinlich in Ordnung, wenn es nur 30 LoC in Bash sind, es aber in Python leichter zu verstehen sein könnte - verwenden Sie Python.
JFord
@ Akito ist es okay, wenn nichts es berührt. Aber es gibt einige Situationen, in denen etwas schief gehen könnte. Sie haben es auf nicht standardmäßig gesetzt und vergessen, es zu löschen. etwas außerhalb hat es geändert, aber Ihr Skript basiert auf der Standardeinstellung und so weiter. man muss immer IFS im Auge behalten, da einige Tools es implizit verwenden.
Wachsamkeit
22

In Bezug auf die Leistung übertrifft Bash Python in der Prozessstartzeit.

Hier sind einige Messungen von meinem i7-Laptop mit Linux Mint:

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

* Von Python geladene Bibliotheken sind: os, os.path, json, time, request, threading, subprocess

Dies zeigt einen großen Unterschied, jedoch verkürzt sich die Bash-Ausführungszeit schnell, wenn etwas Sinnvolles getan werden muss, da normalerweise externe Prozesse aufgerufen werden müssen.

Wenn Sie Wert auf Leistung legen, verwenden Sie bash nur für:

  • wirklich einfache und häufig genannte Skripte
  • Skripte, die hauptsächlich andere Prozesse aufrufen
  • Wenn Sie nur minimale Reibung zwischen manuellen Verwaltungsaktionen und Skripten benötigen, überprüfen Sie schnell einige Befehle und platzieren Sie sie in der Datei file.sh
Grzegorz Luczywo
quelle
... und /bin/echoübertrifft Bash um eine solche Größenordnung, dass es schwer zu messen ist. Anstatt bash /bin/echo mycommand > named_pipeauszuführen , können Sie also (Befehle / Nachrichten an eine Named Pipe oder einen Socket ausgeben) ... verwenden und einen Python-Hintergrundprozess haben, der Befehle / Anweisungen aus dieser Pipe liest und ausführt. Bash ist also keine wirklich gute "Startkostenoptimierung".
Cezary Baginski
Normalerweise sollten Sie Threads anstelle von Prozessen verwenden, wenn die Aufgabe sehr kurz und schnell ist. Mehrere Prozesse sind eine Sache auf hoher Ebene, und solange der Start eines Prozesses innerhalb einer halben Sekunde erfolgt, scheint dies größtenteils ziemlich vernünftig zu sein, würden Sie nicht sagen?
Timothy Swan
16

Bash ist in erster Linie eine Batch- / Shell-Skriptsprache mit weitaus geringerer Unterstützung für verschiedene Datentypen und allerlei Macken in Bezug auf Kontrollstrukturen - ganz zu schweigen von Kompatibilitätsproblemen.

Welche ist schneller? Weder noch, weil Sie hier nicht Äpfel mit Äpfeln vergleichen. Wenn Sie eine ASCII-Textdatei sortieren mussten und Tools wie zcat, sort, uniq und sed verwendeten, rauchen Sie Python in Bezug auf die Leistung.

Wenn Sie jedoch eine geeignete Programmierumgebung benötigen, die Gleitkomma und verschiedene Steuerungsabläufe unterstützt, gewinnt Python zweifellos. Wenn Sie beispielsweise einen rekursiven Algorithmus in Bash und Python geschrieben haben, gewinnt die Python-Version in einer Größenordnung oder mehr.

Justin
quelle
13
Die ganze Moral meines Geschwätzes lautet also: Verwenden Sie das richtige Werkzeug für den richtigen Job.
Justin
2
Gleitkomma wird mit Tools wie awk, bc und mit Shells wie zsh / ksh unterstützt. Warum gewinnt Python also zweifellos?
Ghostdog74
4
Weil diese Tools nicht Bash sind. Ich habe auf einen deutlichen Unterschied hingewiesen. Diese Tools werden in einem Shell-Skript verwendet, aber native Bash selbst unterstützt kein Gleitkomma.
Justin
2
Versuchen Sie es selbst. gzip eine große Protokolldatei und benutze zcat, sort, etc, um etwas zu filtern und benutze dann die nativen Python-Bibliotheken. Mit den nativen Tools geht es erheblich schneller.
Justin
6
@justin, ja, diese Tools sind nicht Bash, aber sie gibt es schon seit der Antike und sie werden oft in Shell-Skripten verwendet. Wenn Sie Gleitkomma möchten, verwenden Sie awk / bc. Es ist eine Kombination dieser Tools, die Shell-Scripting genauso leistungsfähig machen wie Python.
Ghostdog74
12

Wenn Sie ein schnelles Dienstprogramm mit minimalem Aufwand zusammenschustern möchten, ist bash gut. Für einen Wrapper um eine Anwendung ist Bash von unschätzbarem Wert.

Alles, was Sie dazu bringt, immer wieder Verbesserungen vorzunehmen, ist wahrscheinlich (wenn auch nicht immer) besser für eine Sprache wie Python geeignet, da die Pflege von Bash-Code mit mehr als 1000 Zeilen sehr schmerzhaft wird. Bash-Code ist auch irritierend beim Debuggen, wenn es lang wird .......

Ein Teil des Problems bei solchen Fragen besteht meiner Erfahrung nach darin, dass Shell-Skripte normalerweise alle benutzerdefinierten Aufgaben sind. Es gab nur sehr wenige Shell-Scripting-Aufgaben, auf die ich gestoßen bin, bei denen es bereits eine frei verfügbare Lösung gibt.

Zamhassam
quelle
8

Es gibt zwei Szenarien, in denen die Bash-Leistung meiner Meinung nach mindestens gleich ist:

  • Skripterstellung von Befehlszeilenprogrammen
  • Die Ausführung von Skripten dauert nur kurze Zeit. Das Starten des Python-Interpreters dauert länger als die Operation selbst

Trotzdem beschäftige ich mich normalerweise nicht wirklich mit der Leistung der Skriptsprache selbst. Wenn die Leistung ein echtes Problem ist, schreiben Sie kein Skript, sondern programmieren (möglicherweise in Python).

Extraneon
quelle
4

Ich poste diese späte Antwort hauptsächlich, weil Google diese Frage mag.

Ich glaube, das Problem und der Kontext sollten sich wirklich auf den Workflow beziehen, nicht auf die Tools. Die allgemeine Philosophie lautet immer: "Verwenden Sie das richtige Werkzeug für den Job." Aber bevor dies kommt, vergessen viele oft, wenn sie sich in den Werkzeugen verlieren: "Erledige die Arbeit."

Wenn ich ein Problem habe, das nicht vollständig definiert ist, beginne ich fast immer mit Bash. Ich habe einige knorrige Probleme in großen Bash-Skripten gelöst, die sowohl lesbar als auch wartbar sind.

Aber wann beginnt das Problem zu überschreiten, was Bash tun sollte? Ich habe einige Schecks, mit denen ich gewarnt werde:

  1. Wünschte ich mir, Bash hätte 2D-Arrays (oder höher)? Wenn ja, ist es Zeit zu erkennen, dass Bash keine großartige Datenverarbeitungssprache ist.
  2. Mache ich mehr Arbeit, um Daten für andere Dienstprogramme vorzubereiten, als ich diese Dienstprogramme tatsächlich ausführe? Wenn ja, ist es keine gute Zeit, um zu erkennen, dass Bash keine großartige Datenverarbeitungssprache ist.
  3. Wird mein Skript einfach zu groß, um es zu verwalten? Wenn ja, ist es wichtig zu wissen, dass Bash zwar Skriptbibliotheken importieren kann, jedoch kein Paketsystem wie andere Sprachen besitzt. Es ist wirklich eine "roll your own" Sprache im Vergleich zu den meisten anderen. Andererseits ist eine enorme Menge an Funktionen integriert (einige sagen zu viel ...)

Die Liste geht weiter. Fazit: Wenn Sie härter daran arbeiten, Ihre Skripte am Laufen zu halten, während Sie Funktionen hinzufügen, ist es Zeit, Bash zu verlassen.

Nehmen wir an, Sie haben beschlossen, Ihre Arbeit nach Python zu verlagern. Wenn Ihre Bash-Skripte sauber sind, ist die anfängliche Konvertierung recht einfach. Es gibt sogar mehrere Konverter / Übersetzer, die den ersten Durchgang für Sie erledigen.

Die nächste Frage lautet: Was geben Sie auf, zu Python zu wechseln?

  1. Alle Aufrufe an externe Dienstprogramme müssen in etwas aus dem subprocessModul (oder einem gleichwertigen Element) eingeschlossen sein. Es gibt mehrere Möglichkeiten, dies zu tun, und bis 3.7 waren einige Anstrengungen erforderlich, um es richtig zu machen (3.7 wurde verbessert subprocess.run(), um alle gängigen Fälle selbst zu behandeln).

  2. Überraschenderweise verfügt Python über kein plattformunabhängiges Standard-Nichtblockierungsdienstprogramm (mit Zeitüberschreitung) zum Abrufen der Tastatur (stdin). Der Bash- readBefehl ist ein großartiges Tool für die einfache Benutzerinteraktion. Am häufigsten zeige ich einen Spinner, bis der Benutzer eine Taste drückt, und führe gleichzeitig eine Abfragefunktion aus (bei jedem Spinner-Schritt), um sicherzustellen, dass die Dinge noch gut laufen. Dies ist ein schwierigeres Problem, als es zunächst erscheinen würde, daher rufe ich oft einfach bei Bash an: Teuer, aber es macht genau das, was ich brauche.

  3. Wenn Sie auf einem eingebetteten oder speicherbeschränkten System entwickeln, kann der Speicherbedarf von Python um ein Vielfaches größer sein als der von Bash (abhängig von der jeweiligen Aufgabe). Außerdem befindet sich fast immer bereits eine Instanz von Bash im Speicher, was bei Python möglicherweise nicht der Fall ist.

  4. Bei Skripten, die einmal ausgeführt werden und schnell beendet werden, kann die Startzeit von Python viel länger sein als die von Bash. Wenn das Skript jedoch wichtige Berechnungen enthält, wird Python schnell weiterentwickelt.

  5. Python verfügt über das umfassendste Paketsystem der Welt. Wenn Bash noch etwas komplexer wird, hat Python wahrscheinlich ein Paket, mit dem ganze Teile von Bash zu einem einzigen Aufruf werden. Das Finden der richtigen Pakete ist jedoch der größte und entmutigendste Teil, um ein Pythonista zu werden. Glücklicherweise sind Google und StackExchange Ihre Freunde.

BobC
quelle
2

Ich weiß nicht, ob dies korrekt ist, aber ich habe festgestellt, dass Python / Ruby für Skripte mit vielen mathematischen Berechnungen viel besser funktioniert. Andernfalls müssen Sie einen dcanderen "beliebigen Präzisionsrechner" verwenden. Es wird einfach ein sehr großer Schmerz. Mit Python haben Sie viel mehr Kontrolle über Floats und Ints und es ist viel einfacher, viele Berechnungen durchzuführen und manchmal.

Insbesondere würde ich niemals mit einem Bash-Skript arbeiten, um binäre Informationen oder Bytes zu verarbeiten. Stattdessen würde ich so etwas wie Python (vielleicht) oder C ++ oder sogar Node.JS verwenden.

dylnmc
quelle
Die Bash-Arithmetik ist streng ganzzahlig, daher müssen Sie Gleitkommaoperationen ausführen, indem Sie etwas anderes (wie awk oder dc) aufrufen und die Ausgabe daraus erfassen. Einfache monetäre Dinge können oft intern erledigt werden, indem einfach mit 100 multipliziert und der Dezimalpunkt in der Ausgabe angepasst wird.
DocSalvager
0

In Bezug auf die Leistung können beide gleichermaßen das Gleiche tun, sodass sich die Frage stellt, was mehr Entwicklungszeit spart.

Bash ist darauf angewiesen, andere Befehle aufzurufen und sie zum Erstellen neuer Befehle weiterzuleiten. Dies hat den Vorteil, dass Sie schnell neue Programme erstellen können, nur mit dem Code, der von anderen Personen ausgeliehen wurde, unabhängig davon, welche Programmiersprache sie verwendet haben.

Dies hat auch den Nebeneffekt, dass Änderungen in Unterbefehlen ziemlich gut widerstanden werden, da die Schnittstelle zwischen ihnen nur einfacher Text ist.

Außerdem ist Bash sehr freizügig, wie man darauf schreiben kann. Dies bedeutet, dass es für eine größere Vielfalt von Kontexten gut funktioniert, aber es hängt auch davon ab, dass der Programmierer die Absicht hat, sauber und sicher zu codieren. Andernfalls hindert Sie Bash nicht daran, ein Chaos aufzubauen.

Python ist strukturierter strukturiert, sodass ein unordentlicher Programmierer nicht so unordentlich ist. Es funktioniert auch auf Betriebssystemen außerhalb von Linux, sodass es sofort besser geeignet ist, wenn Sie diese Art von Portabilität benötigen.

Das Aufrufen anderer Befehle ist jedoch nicht so einfach. Wenn Ihr Betriebssystem also Unix ist, werden Sie feststellen, dass die Entwicklung auf Bash der schnellste Weg ist, um zu entwickeln.

Wann man Bash benutzt:

  • Es ist ein nicht grafisches Programm oder die Engine eines grafischen.
  • Es ist nur für Unix.

Wann man Python benutzt:

  • Es ist ein grafisches Programm.
  • Es soll unter Windows funktionieren.
Alberto Salvia Novella
quelle