Pourquoi utiliser Python module os méthodes au lieu d'exécution de l'interpréteur de commandes directement?

J'essaie de comprendre quelle est la motivation derrière à l'aide de Python à la bibliothèque de fonctions pour l'exécution d'OS tâches spécifiques telles que la création de fichiers/répertoires, modification des attributs de fichier, etc. au lieu de simplement l'exécution de ces commandes via os.system() ou subprocess.call()?

Par exemple, pourquoi voudrais-je utiliser os.chmod au lieu de faire os.system("chmod...")?

Je comprends que c'est plus "pythonic" utiliser Python est disponible à la bibliothèque de méthodes, autant que possible, au lieu de simplement exécution de l'interpréteur de commandes directement. Mais, est-il un autre motivation derrière de faire cela à partir d'une fonctionnalité de point de vue?

Je ne parle que de l'exécution d'un simple interpréteur de ligne de commandes ici. Lorsque nous avons besoin de plus de contrôle sur l'exécution de la tâche, je comprends que l'utilisation de subprocess module a plus de sens, par exemple.

  • En gros, vous frappez le clou sur la tête. Au niveau de l'OS tâches que vous consultez sont assez communs qu'ils ne le méritent leur propre fonction au lieu d'être simplement relégués à être appelé via le système d'exploitation.système.
  • BTW, avez-vous essayer de temps en temps d'exécution du système d'exploitation.chmod vs os.system("chmod..."). Je hasarder une conjecture qu'il répondra à une partie de votre question.
  • Pourquoi avoir print quand vous pourriez os.system("echo Hello world!") ?
  • Pour la même raison, vous devez utiliser os.path pour gérer les chemins d'accès au lieu de saisir manuellement les manipuler: il fonctionne sur tous les OS dans lequel il s'exécute.
  • "Exécution de l'interpréteur de commandes directement" est, en réalité, moins directe. Le shell n'est pas une interface de bas niveau pour le système, et os.chmod ne va pas à appeler les chmod programme de la shell. À l'aide de os.system('chmod ...') lance un shell pour interpréter une chaîne d'appeler un autre fichier exécutable pour faire un appel à la C chmod fonction, tandis que os.chmod(...) va beaucoup plus directement à la C chmod.
  • strictement parlant, il n'est pas nécessairement aller à C de chmod, mais plutôt de faire un chmod syscall. Dans Disponible de cas, il n'est probablement pas ré-écrire le local syscall convention, mais plutôt à réutiliser la bibliothèque C du syscall l'application de la convention, mais d'autres implémentations peuvent éventuellement décider autrement.

InformationsquelleAutor Koderok | 2015-02-17