242 votes

Puis-je utiliser Python comme remplacement bash?

Je fais actuellement ma manipulation de textfile à travers un tas d'awk, de sed, de bash et d'un tout petit peu de Perl.

J'ai vu mentionné quelques endroits où python est bon pour ce genre de chose, j'en connais un peu et j'aimerais en savoir plus. Python est-il un bon choix pour cela, et y a-t-il un bon livre ou guide pour apprendre à utiliser python pour remplacer le script shell, awk, sed et les amis?

144voto

S.Lott Points 207588

Shell a plusieurs ensembles de fonctionnalités.

  • L'Essentiel Linux/Unix commandes. Tous ces éléments sont disponibles par le biais de la sous-processus de la bibliothèque. Ce n'est pas toujours le meilleur choix pour faire toutes les commandes externes. Regardez aussi shutil pour certaines commandes qui sont distincts des commandes Linux, mais vous pourriez probablement mettre en œuvre directement dans vos scripts Python. Un autre énorme lot de commandes Linux sont dans l' os de la bibliothèque, vous pouvez le faire plus simplement en Python.

    Et -- bonus! -- plus rapidement. Chaque commande de Linux dans le shell (avec quelques exceptions) fourches à un sous-processus. Par l'utilisation de Python shutil et os modules, vous n'avez pas la fourche d'un sous-processus.

  • Les caractéristiques de l'environnement de shell. Cela inclut des choses qui définit une commande de l'environnement (répertoire actuel et les variables d'environnement et qu'est-ce-pas). Vous pouvez facilement gérer cela à partir de Python directement.

  • La coquille de la programmation des fonctions. C'est tout l'état du processus le code de vérification, les différentes commandes logiques (if, while, for, etc.) le test de commandement et de tous ses proches. La définition de la fonction de trucs. C'est beaucoup, beaucoup plus facile en Python. C'est l'une des immenses victoires à se débarrasser de bash et de le faire en Python.

  • Les fonctionnalités d'Interaction. Cela comprend l'historique des commandes et ce-pas. Vous n'en avez pas besoin pour l'écriture de scripts shell. Ce n'est que pour l'interaction humaine, et non pas pour le scénario.

  • La coquille de fonctionnalités de gestion de fichier. Cela comprend la redirection et les pipelines. C'est plus compliqué. Beaucoup de ce qui peut être fait avec des sous-processus. Mais certaines choses qui sont facilement dans la coque sont désagréables en Python. Plus précisément, des trucs comme (a | b; c ) | something >result. Cela va à deux processus en parallèle (avec sortie d' a comme entrée d' b), suivie par un troisième processus. La sortie de cette séquence est exécutée en parallèle avec something et la sortie sont collectées dans un fichier nommé result. C'est seulement complexe à exprimer dans une autre langue.

Des programmes spécifiques (awk, sed, grep, etc.) peut souvent être réécrit comme des modules Python. Ne pas aller par dessus bord. Remplacer ce que vous avez besoin et de faire évoluer votre "grep" module. Ne pas commencer l'écriture d'un module Python qui remplace "grep".

La meilleure chose est que vous pouvez le faire par étapes.

  1. Remplacer AWK, PERL et Python. Laissez tout le reste seul.
  2. Chercher à remplacer GREP avec Python. Cela peut être un peu plus complexe, mais votre version de GREP peut être adaptée à vos besoins en matière de traitement.
  3. Regarder le remplacement de TROUVER avec Python boucles os.walk. C'est une grande victoire, car vous ne pouvez pas reproduire le plus grand nombre de processus.
  4. Regarder le remplacement de commune du shell logique (boucles, décisions, etc.) avec des scripts Python.

103voto

Piotr Dobrogost Points 14412

Oui, bien sûr :)

Jetez un oeil à ces bibliothèques, qui vous aident à ne Jamais écrire des scripts shell de nouveau (Plumbum de la devise).

Aussi, si vous souhaitez remplacer awk, sed et grep avec quelque chose de basé sur Python, alors je vous recommande pp -

"La Pyed Piper", ou pp, est un linux en ligne de commande de manipulation de texte outil similaire à awk ou sed, mais qui utilise la norme de chaîne python et liste des méthodes ainsi que des fonctions personnalisées évolué pour produire rapidement des les résultats d'une intense environnement de production.

57voto

TheK Points 111

Je viens de découvrir comment combiner les meilleures parties de bash et ipython. Jusqu'à présent, cela me semble plus confortable que l'utilisation de sous-processus et ainsi de suite. Vous pouvez facilement copier de grandes parties de scripts bash existants et par exemple ajouter une gestion des erreurs de la façon python :) Et voici mon résultat:

 #!/usr/bin/env ipython3

# *** How to have the most comfort scripting experience of your life ***
# ######################################################################
#
# … by using ipython for scripting combined with subcommands from bash!
#
# 1. echo "#!/usr/bin/env ipython3" > scriptname.ipy    # creates new ipy-file
#
# 2. chmod +x scriptname.ipy                            # make in executable
#
# 3. starting with line 2, write normal python or do some of
#    the ! magic of ipython, so that you can use unix commands
#    within python and even assign their output to a variable via
#    var = !cmd1 | cmd2 | cmd3                          # enjoy ;)
#
# 4. run via ./scriptname.ipy - if it fails with recognizing % and !
#    but parses raw python fine, please check again for the .ipy suffix

# ugly example, please go and find more in the wild
files = !ls *.* | grep "y"
for file in files:
  !echo $file | grep "p"
# sorry for this nonsense example ;)
 

31voto

Mapad Points 3033
  • Si vous souhaitez utiliser Python comme une coquille, pourquoi ne pas jeter un oeil à IPython ? Il est également bon d'apprendre de manière interactive la langue.
  • Si vous faites beaucoup de manipulation de texte, et si vous utilisez Vim comme éditeur de texte, vous pouvez également écrire directement des plugins pour Vim en python. il suffit de taper ":aider python" dans Vim et suivez les instructions, ou jetez un oeil à cette présentation. Il est tellement facile et puissant pour écrire des fonctions que vous allez utiliser directement dans votre éditeur!

16voto

MattG Points 1127

Au début il y avait sh, sed, awk (et de trouver, et grep,...). Il était bon. Mais awk peut être une drôle de petite bête et dur de s'en souvenir si vous ne l'utilisez pas souvent. Puis le grand chameau créé Perl. Perl a été un administrateur système du rêve. C'était comme shell scripting sur les stéroïdes. Traitement de texte, y compris les expressions régulières ont été qu'une partie de la langue. Puis il a laid... les Gens ont essayé de faire de grosses applications avec Perl. Maintenant, ne vous méprenez pas, Perl peut être une application, mais il peut (peut!) un fouillis si vous n'êtes pas très prudent. Ensuite, il est tout cela à plat des données d'entreprise. C'est suffisant pour conduire un programmeur de noix.

Entrez Python, Ruby, et al. Ce sont vraiment de très bonnes fins générales de langues. Ils soutiennent traitement de texte, et de le faire bien (mais peut-être pas aussi étroitement mêlés dans le noyau de base de la langue). Mais ils aussi à l'échelle très bien, et ont toujours agréable à regarder code à la fin de la journée. Ils ont également développé assez salée communautés avec beaucoup de bibliothèques pour la plupart rien.

Maintenant, une grande partie du négatif vers Perl est une question d'opinion, et certainement certaines personnes peuvent écrire très propre Perl, mais avec ce beaucoup de gens se plaindre d'être trop facile de créer d'obfuscation de code, vous savez que le grain de la vérité est là. La véritable question devient alors, êtes-vous jamais à utiliser cette langue pour plus qu'un simple script bash de remplacement. Si non, d'apprendre plus de Perl.. c'est absolument fantastique. Si, d'autre part, vous voulez une langue qui grandira avec vous tant que vous voulez faire plus, je vous propose, Python ou Ruby.

De toute façon, bonne chance!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X