web-dev-qa-db-fra.com

Python scripts - Comment exécuter des commandes linux?

Je dois faire un tas de fichiers copier, déplacer, svn check commandes, vérification de répertoire, etc. et j'essaye de faire un script pour le faire pour moi. J'ai la syntaxe de base python, mais je ne sais pas comment utiliser python pour exécuter des commandes linux. Je connais les commandes linux nécessaires, par exemple Sudo apt-get install Subversion. Je ne sais tout simplement pas comment envelopper python.

Plus précisément, quelqu'un pourrait-il donner des exemples sur la manière de:

  • Vérifiez si un paquet (tel que svn) est installé, sinon installez-le. Je sais que c'est un simple if-statement mais je ne sais pas comment l'écrire ...
  • Vérifiez si un dossier avec un nom spécifique est installé, sinon créez-le sur le bureau/un autre répertoire. Semblable à ce qui précède, je suppose.
  • Déplacer vers un certain répertoire et exécuter une commande (comme je veux extraire un fichier .tgz dans un certain répertoire)

Il y a plus que cela, mais je veux comprendre les principes de base et apprendre à exécuter des commandes Linux à l'aide de scripts python. Merci pour votre temps ~

EDIT: je suis spécifiquement obligé d'utiliser python

3
user114638

Vous pouvez sûrement tout faire en utilisant les éléments intégrés de Python dans les modules os et sous-processus .

Si vous souhaitez que votre script "interagisse" avec les programmes que vous appelez (par exemple, "attendez jusqu'à ce qu'il imprime" Appuyez sur Entrée pour continuer ", puis envoyez-lui un appui sur la touche Entrée), vous pouvez l'utiliser - pexpect module.

Pour un niveau légèrement supérieur, jetez un œil à la bibliothèque Fabric . En plus d'exécuter des commandes locales, cela vous permettrait également d'exécuter facilement du code sur des machines distantes via SSH.

Un petit échantillon de code utilisant Fabric:

if "dirty" in api.local("git describe --dirty", capture=True):
    print colors.red("""Your repository is dirty, commit any changes first""")
    sys.exit(1)

Lit presque comme de la poésie :) Un code similaire dans Bash ressemblerait à un gâchis inintelligible en comparaison ...

5
Sergey