È pythonic sostituire uno script bash con una serie di chiamate di sottoprocesso

2

Ho uno script bash piuttosto semplice che consiste in un gruppo di one liners e qualche logica semplice.

È stato raccomandato di strappare a parte lo script di bash e di riscriverlo tutto in python usando il sottoprocesso. L'argomento era che stiamo costruendo un progetto python, e che in questo modo è più pitonico.

L'unico vantaggio che vedo è che la logica può essere arricchita con una migliore registrazione e gestione degli errori. D'altra parte sembra logico mantenere le cose bash negli script di bash.

Nota: mi rendo conto che questa è una domanda sulle migliori pratiche, spero che questo sia il canale SE giusto per questi.

    
posta Roman 25.04.2017 - 13:37
fonte

3 risposte

3

Alcuni motivi per passare a Python:

  • Non ti disturberà più se qualcuno nel tuo team non conosce Bash.

  • Il mantenimento del codice non richiede il passaggio dal codice Bash al codice Python.

  • Se la logica cambia, avrai un motivo in meno per essere bloccato.

  • Il refactoring diventa più facile.

  • Puoi avere alcune metriche pertinenti sul tuo codice. Non ho mai visto nessuna metrica rilevante per Bash.

Tuttavia, mantenere lo script Bash in atto ha uno dei principali vantaggi. Guarda quanto è brutto il codice Python quando inizi a fare molte chiamate di sottoprocesso. Le chiamate consecutive a diversi processi sono fatte meglio in Bash, lo strumento appositamente creato per questo. Se, inoltre, ti affidi a grep e strumenti simili per lavorare con i dati, portarli su Python sarebbe piuttosto difficile e molto incline agli errori.

    
risposta data 25.04.2017 - 14:16
fonte
4

Non so se è "pythonic" ma sembra una cattiva idea riscrivere uno script bash in python ... con chiamate di sottoprocesso a bash , solo perché lo script originale non era in python.

Se bash era uno strumento abbastanza buono per lo script in primo luogo, perché cambiarlo? Soprattutto se si finisce con un nuovo script che include solo le chiamate presenti nell'originale.

Se riesci a trovare una ragione migliore di "non è python", quindi vai avanti e riscrivi.

    
risposta data 25.04.2017 - 16:28
fonte
2

Dipende, ma nella maggior parte dei casi è meglio usare lo script python. Tutti i punti seguenti possono essere risolti usando lo script python, mentre la soluzione bash potrebbe essere complicata:

  • Passaggio dei parametri allo script (bash $ 1, $ 2)
  • Convalida e trasformazione dei parametri di input
  • Registrazione (come inviare i registri al server di registrazione?)
  • Riutilizzo del codice (come riutilizzare il codice da altri script bash?)
  • Raccolta di metriche e metriche di condivisione (quanto è necessario per il completamento del comando?)
  • Test
risposta data 25.04.2017 - 15:38
fonte

Leggi altre domande sui tag