Je me demandais si elle est considérée comme si elle est considérée comme un bon style pour appeler des commandes Bash dans un script Python à l'aide d'OS.System (). Je me demandais également si elle est aussi sûre de le faire. P>
Je sais comment mettre en œuvre certaines des fonctionnalités dont j'ai besoin dans Bash et en Python, mais il est beaucoup plus simple et plus intuitif de la mettre en œuvre à Bash. Cependant, j'ai l'impression que cela est très hackâche d'écrire OS.System ("Code Bash"). P>
Spécifiquement, je souhaite déplacer tous les fichiers terminés par une certaine extension à un répertoire. P>
en bash: * mv .ext / chemin / à / destination em>
En Python (pseudocode):
Pour le fichier dans le répertoire:
Si file.endswith ("ext"):
Déplacer le fichier sur la destination p>
Dans ce cas, que dois-je faire? P>
7 Réponses :
C'est toujours meilleur et meilleur style pour utiliser des fonctions Python pour faire ce genre de choses. Avec Python, ce n'est pas si difficile d'écrire un script de manière indépendante du système d'exploitation au lieu d'utiliser Bash. P>
Ce n'est pas une idée, car cela rend votre script un Parfois, vous n'avez pas de choix, mais si c'est aussi simple que cela, écrivant le code de manière nativement en Python aurait beaucoup plus de sens, et aussi plus vite de démarrer (puisque le processus Python n'aura pas à reproduit une nouvelle coquille juste pour exécuter la commande unique). P>
Découvrez Python's Shuttilis code>
module. Il propose des opérations de système de fichiers tels que le déplacement de fichiers. Entre cela et le module code> OS code>, vous devez disposer de tous les outils dont vous avez besoin. Ceci est préférable aux commandes Bash pour les raisons d'autres. P>
Les seuls problèmes de citation suggèrent qu'une solution python python est préférable. P>
Certaines raisons pour lesquelles vous devriez utiliser python pur,
Dans ce cas, j'utiliserais ... p>
import os for filename in os.listdir('.'): if filename.endswith('.ext'): os.rename(filename, os.path.join('path', 'to', 'new', 'destination', filename))
Vous pouvez supprimer le fichier.endswith () si vous utilisiez glob.glob ('*. EXT') au lieu de os.listdir
Tout d'abord, votre exemple utilise mv em>, qui est un programme dans Coreutils em>, pas bash. Utilisation des appels OS.System () à des programmes externes est considéré comme un mauvais style parce que: p> RECHERCHE
import glob
import shutil
for extfile in glob.glob('*.ext'):
shutil.move(extfile,dest)
Bonne réponse, mais je me limite un peu lorsque je vois des variables nommées "fichier" car il masque le fichier intégré.
Bon commentaire - édité :)
Grande réponse, mais pour ceux qui recherchent plus d'informations de migration Bash-> Python, je vais créer un lien vers
Plus généralement, Python fournit le module "Sous-péprobage" qui vous permettra d'exécuter des commandes et d'exercer un contrôle complet sur leur sortie. Il vous permet de renverser de nouveaux processus, de se connecter à leurs tuyaux d'entrée / sortie / d'erreur et à obtenir leurs codes de retour ": P>
Pourrait implémenter la fonctionnalité Bash dans un script Bash propre et avoir Python exécuter le script Bash opposé à la mise en place du code de code directement dans OS.System ()? (Utilisez le meilleur outil pour le travail)
Ok, merci beaucoup pour toute votre aide! Vos réponses ont effacé certaines idées fausses dans ma tête. J'apprécie vraiment toutes les réponses.