Comment exécuter une commande de ligne de commande dans un script Python?

Je « m utilise 2 scripts séparés, Scale1.py et Scale2.py. Pour les exécuter, jentre sudo python Scale1.py ou sudo python Scale2.py à partir de la ligne de commande du terminal. Je voudrais avoir une ligne dans le Scale2.py script dans lequel si jappuie sur un bouton, le programme sarrête et sexécute Scale1.py. Quelque chose comme ça, qui ne fonctionne pas.

 if GPIO.input(23) == False: break(sudo python Scale1.py)  

Réponse

os.system("sudo python scale1.py")

vous devrez dabord importer le module os

import os

Je nai pas de pi avec moi atm à tester, mais cela vient de la deuxième réponse à cette question: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

Commentaires

  • Cest ce que jai essayé et cela a fonctionné, merci beaucoup Harry! Mais Jai dabord dû combiner les deux programmes. Maintenant, os.system (" sudo python Scale3.py ") redémarre simplement au début du programme Scale3.py, ce qui est bien. Je pense que limportation Scale3.py fonctionnera également. Je nai ' pas essayé le sous-processus, cela semble intéressant et cest probablement quelque chose que jai besoin dapprendre .
  • os.system() a été abandonné au profit de subprocess, voir stackoverflow.com/a/4256153/4212158

Réponse

En général, utilisez le sous-processus module

subprocess.call(["sudo","python","scale1.py"]) 

pour les appels de ligne de commande.

Un exemple de traitement du résultat dun appel de sous-processus;

 result = subprocess.check_output(["sudo","service","mpd","restart"]) 

Le sous-processus remplace plusieurs modules et fonctions plus anciens, comme os.system et os.spawn . Il fait un bon travail pour nettoyer les arguments, donc il vous protège de l injection shell .

https://docs.python.org/2/library/subprocess.html

Bien sûr, pour exécuter un deuxième script python, il nest pas nécessaire dappeler CLI, vous pouvez les importer.

Commentaires

  • Je ' essaie dapprendre à émettre des commandes à partir dun script Python (voir ici et ici ) et rencontrant des problèmes. Je me demande si subprocess pourrait être mieux dans mon cas également.

Réponse

Vous pouvez utiliser sudo comme le suggère harry sib, mais vous devrez ajouter lutilisateur exécutant le premier script au fichier sudoers .

La meilleure façon dexécuter un script python à partir dun autre script python est de limporter. Vous devriez avoir la logique de votre script dans une méthode dans le deuxième script:

 # Scale2.py def run(): do_first() do_second() [...] # Run it only if called from the command line if __name__ == "__main__": run() 
 # Scale1.py import Scale2 if (GPIO.input(23) == False): Scale2.run() 

Commentaires

  • +1, Puisque python en est capable, ce sera la réponse cleanest.
  • +1 , cest la bonne façon de faire ce que le PO veut et devrait probablement être la réponse acceptée.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *