Obviamente Python é mais amigável, uma busca rápida no google mostra muitos resultados que dizem que, como Python é compilado por byte é geralmente mais rápido. Eu até descobri isso que afirma que você pode ver uma melhoria de mais de 2.000% nas operações baseadas em dicionário.
Qual é a sua experiência neste assunto? Em que tipo de tarefa cada um é um vencedor claro?
python
performance
bash
Sósia
fonte
fonte
Respostas:
Fluxo de mainframe típico ...
Fluxo típico do Linux ...
Shells são a cola do Linux
Os shells do Linux, como sh / ksh / bash / ... fornecem recursos de designação de entrada / saída / controle de fluxo muito parecidos com o antigo mainframe Job Control Language ... mas com esteróides! Eles são linguagens Turing completas em seu próprio direito, enquanto são otimizados para passar dados e controle de forma eficiente de e para outros processos de execução escritos em qualquer linguagem que o O / S suporte.
A maioria dos aplicativos Linux, independentemente do idioma em que a maior parte do programa é escrito, depende de scripts de shell e o Bash se tornou o mais comum. Clicar em um ícone na área de trabalho geralmente executa um pequeno script Bash . Esse script, direta ou indiretamente, sabe onde estão todos os arquivos necessários e define variáveis e parâmetros de linha de comando, finalmente chamando o programa. Esse é o uso mais simples de um shell.
O Linux como o conhecemos, entretanto, dificilmente seria Linux sem os milhares de scripts de shell que inicializam o sistema, respondem a eventos, controlam as prioridades de execução e compilam, configuram e executam programas. Muitos deles são bastante grandes e complexos.
Os shells fornecem uma infraestrutura que nos permite usar componentes pré-construídos que são vinculados em tempo de execução em vez de tempo de compilação. Esses componentes são programas independentes que podem ser usados sozinhos ou em outras combinações sem recompilar. A sintaxe para chamá-los é indistinguível de um comando embutido do Bash e, de fato, existem vários comandos embutidos para os quais também existe um executável autônomo no sistema, geralmente com opções adicionais.
Não há diferença de desempenho em toda a linguagem entre Python e Bash . Depende inteiramente de como cada um é codificado e quais ferramentas externas são chamadas.
Qualquer uma das ferramentas mais conhecidas como awk, sed, grep, bc, dc, tr, etc. deixará de fazer essas operações em qualquer idioma no pó. O Bash é preferível para qualquer coisa sem uma interface gráfica do usuário, pois é mais fácil e mais eficiente chamar e passar dados de volta de uma ferramenta como as do Bash do que do Python .
atuação
Depende de quais programas o script de shell Bash chama e de sua adequação para a subtarefa que recebem, se o rendimento geral e / ou a capacidade de resposta será melhor ou pior do que o Python equivalente . Para complicar as coisas , o Python , como a maioria das linguagens, também pode chamar outros executáveis, embora seja mais complicado e, portanto, não é usado com tanta frequência.
Interface de usuário
Uma área em que o Python é o vencedor claro é a interface do usuário. Isso a torna uma linguagem excelente para a construção de aplicativos locais ou cliente-servidor, já que oferece suporte nativo a gráficos GTK e é muito mais intuitiva que o Bash .
O Bash só entende texto. Outras ferramentas devem ser chamadas para uma GUI e os dados devolvidos a partir delas. Um script Python é uma opção. Opções mais rápidas, mas menos flexíveis, são os binários como YAD, Zenity e GTKDialog .
Enquanto shells como o Bash funcionam bem com GUIs como Yad , GtkDialog (interface semelhante a XML incorporada para funções GTK +) , dialog e xmessage , Python é muito mais capaz e, portanto, melhor para janelas GUI complexas.
Resumo
Construir com scripts de shell é como montar um computador com componentes prontos para uso, da mesma forma que os desktops.
Construir com Python , C ++ ou qualquer outra linguagem é mais como construir um computador soldando os chips (bibliotecas) e outras partes eletrônicas, como os smartphones.
Os melhores resultados são geralmente obtidos usando uma combinação de linguagens onde cada uma pode fazer o que faz melhor. Um desenvolvedor chama isso de " programação poliglota ".
fonte
Geralmente, o bash funciona melhor que o python apenas em ambientes onde o python não está disponível. :)
Sério, eu tenho que lidar com as duas linguagens diariamente, e irei usar o python instantaneamente em vez do bash se puder. Infelizmente, sou forçado a usar o bash em certas plataformas "pequenas" porque alguém (por engano, IMHO) decidiu que o python é "muito grande" para caber.
Embora seja verdade que o bash pode ser mais rápido do que o python para algumas tarefas selecionadas, ele nunca pode ser tão rápido de desenvolver, ou tão fácil de manter (pelo menos depois de passar de 10 linhas de código ou mais). O único ponto forte do Bash em relação a python, ruby ou lua, etc., é sua onipresença.
fonte
os
ou do Pythonshutil
.A eficiência do desenvolvedor é muito mais importante para mim em cenários onde bash e Python são escolhas sensatas.
Algumas tarefas se prestam bem ao bash e outras ao Python. Também não é incomum eu iniciar algo como um script bash e alterá-lo para Python conforme ele evolui ao longo de várias semanas.
Uma grande vantagem do Python é em casos de canto em torno de manipulação de nome de arquivo, enquanto tem glob , shutil , subprocess e outros para necessidades de script comuns.
fonte
Ao escrever scripts, o desempenho não importa (na maioria dos casos).
Se você se preocupa com o desempenho, 'Python vs Bash' é uma questão falsa.
Pitão :
+ mais fácil de escrever
+ mais fácil de manter
+ mais fácil de reutilizar código (tente encontrar uma maneira universal à prova de erros de incluir arquivos com código comum
sh
, ouso)+ você também pode fazer OOP com ele!
+ análise de argumentos mais fácil. bem, não é mais fácil, exatamente. ainda será muito prolixo para o meu gosto, mas python tem um
argparse
recurso embutido.- 'subprocesso' feio e feio. tente encadear comandos e não chorar o quão feio seu código se tornará. especialmente se você se preocupa com os códigos de saída.
Bash :
+ onipresença, como foi dito antes, de fato.
+ encadeamento de comandos simples. é assim que você cola diferentes comandos de uma maneira simples. Também
Bash
(nãosh
) tem algumas melhorias, comopipefail
, então, o encadeamento é muito curto e expressivo.+ não requer a instalação de programas de terceiros. pode ser executado imediatamente.
- Deus, está cheio de pegadinhas. IFS, CDPATH .. milhares deles.
Se alguém estiver escrevendo um script maior que 100 LOC: escolha Python
Se alguém precisar de manipulação de caminho no script: escolha Python (3)
Se alguém precisar de algo parecido,
alias
mas um pouco complicado: escolha Bash / shDe qualquer forma, deve-se tentar os dois lados para ter uma ideia do que eles são capazes.
Talvez a resposta possa ser estendida com empacotamento e pontos de suporte IDE, mas não estou familiarizado com esses lados.
Como sempre, você deve escolher entre sanduíche de cocô e douche gigante. E lembre-se, apenas alguns anos atrás, Perl era uma nova esperança. Onde está agora.
fonte
O bash em termos de desempenho supera o python no tempo de inicialização do processo.
Aqui estão algumas medições do meu laptop Core i7 executando o Linux Mint:
* As bibliotecas carregadas do Python são: os, os.path, json, time, requests, threading, subprocess
Isso mostra uma grande diferença, entretanto o tempo de execução do bash se degrada rapidamente se ele tiver que fazer algo sensato, pois geralmente deve chamar processos externos.
Se você se preocupa com o desempenho, use o bash apenas para:
fonte
/bin/echo
supera o bash em tal magnitude, é difícil de medir. Portanto, em vez de executar o bash, você pode usar/bin/echo mycommand > named_pipe
(comandos / mensagens de saída para um pipe ou socket nomeado) ... e ter um processo Python de segundo plano lendo comandos / instruções daquele pipe e executando-os. Portanto, o bash não é realmente uma boa "otimização de custos de inicialização".Bash é principalmente uma linguagem de script batch / shell com muito menos suporte para vários tipos de dados e todos os tipos de peculiaridades em torno de estruturas de controle - para não mencionar problemas de compatibilidade.
O que é mais rápido? Nem, porque você não está comparando maçãs com maçãs aqui. Se você tivesse que classificar um arquivo de texto ascii e estivesse usando ferramentas como zcat, sort, uniq e sed, então você abandonaria o Python em termos de desempenho.
No entanto, se você precisa de um ambiente de programação adequado que suporte ponto flutuante e vários fluxos de controle, então o Python vence. Se você escreveu, digamos, um algoritmo recursivo em Bash e Python, a versão Python vencerá em uma ordem de magnitude ou mais.
fonte
Se você está procurando montar um utilitário rápido com o mínimo de esforço, o bash é bom. Para um wrapper em torno de um aplicativo, o bash é inestimável.
Qualquer coisa que possa fazer você voltar várias vezes para adicionar melhorias é provavelmente (embora nem sempre) mais adequado para uma linguagem como Python, já que o código Bash com mais de 1000 linhas é muito difícil de manter. O código Bash também é irritante para depurar quando fica longo .......
Parte do problema com esse tipo de pergunta é, pela minha experiência, que os scripts de shell geralmente são tarefas personalizadas. Eu encontrei muito poucas tarefas de script de shell em que já houvesse uma solução disponível gratuitamente.
fonte
Existem 2 cenários em que o desempenho do Bash é pelo menos igual, acredito:
Dito isso, normalmente não me preocupo muito com o desempenho da linguagem de script em si. Se o desempenho é um problema real, você não faz script, mas programa (possivelmente em Python).
fonte
Estou postando esta resposta tardia principalmente porque o Google gosta dessa pergunta.
Acredito que o problema e o contexto realmente devem ser sobre o fluxo de trabalho, não as ferramentas. A filosofia geral é sempre "Use a ferramenta certa para o trabalho." Mas antes disso vem um que muitos esquecem quando se perdem nas ferramentas: "Faça o trabalho".
Quando tenho um problema que não está completamente definido, quase sempre começo com o Bash. Resolvi alguns problemas complicados em grandes scripts Bash que podem ser lidos e mantidos.
Mas quando o problema começa a exceder o que o Bash deveria fazer? Tenho alguns cheques que uso para me avisar:
A lista continua. Resumindo, quando você está trabalhando mais para manter seus scripts em execução ao adicionar recursos, é hora de deixar o Bash.
Vamos supor que você decidiu mover seu trabalho para Python. Se seus scripts Bash estiverem limpos, a conversão inicial é bastante direta. Existem até vários conversores / tradutores que farão a primeira passagem para você.
A próxima pergunta é: Do que você desiste de mudar para Python?
Todas as chamadas para utilitários externos devem ser agrupadas em algo do
subprocess
módulo (ou equivalente). Existem várias maneiras de fazer isso, e até o 3.7 era necessário algum esforço para acertar (o 3.7 melhorousubprocess.run()
para lidar com todos os casos comuns por conta própria).Surpreendentemente, o Python não tem um utilitário sem bloqueio independente de plataforma padrão (com tempo limite) para consultar o teclado (stdin). O
read
comando Bash é uma ferramenta incrível para interação simples do usuário. Meu uso mais comum é mostrar um botão giratório até que o usuário pressione uma tecla, enquanto também executa uma função de votação (a cada etapa do botão giratório) para garantir que as coisas ainda estejam funcionando bem. Este é um problema mais difícil do que poderia parecer à primeira vista, então muitas vezes eu simplesmente faço uma ligação para Bash: caro, mas faz exatamente o que preciso.Se você estiver desenvolvendo em um sistema integrado ou com restrição de memória, a área de cobertura da memória do Python pode ser muitas vezes maior do que a do Bash (dependendo da tarefa em mãos). Além disso, quase sempre há uma instância do Bash já na memória, o que pode não ser o caso do Python.
Para scripts que são executados uma vez e saem rapidamente, o tempo de inicialização do Python pode ser muito mais longo do que o do Bash. Mas se o script contém cálculos significativos, o Python sai rapidamente à frente.
Python tem o sistema de pacotes mais completo do planeta. Quando o Bash fica ainda mais complexo, Python provavelmente tem um pacote que faz com que pedaços inteiros do Bash se tornem uma única chamada. No entanto, encontrar o (s) pacote (s) certo (s) para usar é a maior e mais assustadora parte de se tornar um Pythonista. Felizmente, o Google e o StackExchange são seus amigos.
fonte
Não sei se isso é preciso, mas descobri que python / ruby funciona muito melhor para scripts que têm muitos cálculos matemáticos. Caso contrário, você tem que usar
dc
ou alguma outra "calculadora de precisão arbitrária". Simplesmente se torna uma grande dor. Com o python, você tem muito mais controle sobre floats do que ints e é muito mais fácil realizar muitos cálculos e às vezes.Em particular, eu nunca trabalharia com um script bash para lidar com informações binárias ou bytes. Em vez disso, usaria algo como python (talvez) ou C ++ ou mesmo Node.JS.
fonte
Em termos de desempenho, ambos podem fazer da mesma forma, então a questão é: qual economiza mais tempo de desenvolvimento?
O Bash depende da chamada de outros comandos e canalizá-los para a criação de novos. A vantagem disso é que você pode criar novos programas rapidamente apenas com o código emprestado de outras pessoas, independentemente da linguagem de programação usada.
Isso também tem o efeito colateral de resistir muito bem às mudanças nos subcomandos, já que a interface entre eles é apenas texto simples.
Além disso, o Bash é muito permissivo sobre como você pode escrever nele. Isso significa que funcionará bem para uma ampla variedade de contextos, mas também depende do programador ter a intenção de codificar de maneira limpa e segura. Caso contrário, o Bash não o impedirá de construir uma bagunça.
Python é mais estruturado em estilo, então um programador bagunçado não será tão bagunçado. Ele também funcionará em sistemas operacionais fora do Linux, tornando-o instantaneamente mais apropriado se você precisar desse tipo de portabilidade.
Mas não é tão simples chamar outros comandos. Portanto, se o seu sistema operacional for Unix, provavelmente você descobrirá que desenvolver no Bash é a maneira mais rápida de desenvolver.
Quando usar o Bash:
Quando usar Python:
fonte