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
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
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.
os.system()
a été abandonné au profit desubprocess
, voir stackoverflow.com/a/4256153/4212158