2017-02-02 2 views
1

Je crée des scripts gpio sur mon rpi et je veux qu'un programme de base s'exécute et tue un autre script python.Comment lancer et tuer un processus (script python nécessitant sudo)

J'ai eu quelques difficultés à trouver une explication sur la façon de procéder, mais j'ai finalement opté pour cette solution: How to terminate a python subprocess launched with shell=True. Donc, mon code est:

# // on button pressed, turn on the lcd 
spawnProcess = subprocess.Popen("python jukebox_lcd.py", shell=True, preexec_fn=os.setsid) 
print "pid : ", os.getpgid(spawnProcess.pid) 
# // off button pressed, turn off the lcd 
os.killpg(os.getpgid(spawnProcess.pid), signal.SIGTERM) 

Il retournera par exemple pid: 5030 mais ne se coupera pas l'écran ... Le processus que je dois tuer est 5031:

[email protected]:~$ ps -elf | grep python 
4 S root  4991 2760 0 80 0 - 1307 -  23:11 pts/0 00:00:00 sudo python jukebox-buttons.py 
4 S root  4995 4991 3 80 0 - 8352 -  23:11 pts/0 00:00:00 python jukebox-buttons.py 
0 S root  5030 4995 0 80 0 - 456 -  23:11 ?  00:00:00 /bin/sh -c python /home/FTP/jukebox_lcd.py 
0 S root  5031 5030 1 80 0 - 2062 -  23:11 ?  00:00:00 python /home/FTP/jukebox_lcd.py 
0 S volumio 5035 3952 0 80 0 - 648 pipe_w 23:11 pts/1 00:00:00 grep python 

Je ne Je ne comprends pas pourquoi mon sous-processus exécute "/ bin/sh -c python myscript" et comment résoudre ce problème. Toute aide s'il vous plaît?

+1

pourquoi ne pas simplement tuer spawnProcess.pid? Est-ce l'identifiant de processus que vous vouliez tuer? Je pense que vous avez/bin/sh parce que vous avez mis shell à True. – Shiping

+0

os.getpgid (spawnProcess.pid) et spawnProcess.pid me donnent le même résultat. Sans shell mis à True mon script n'est pas lancé et je veux tuer le processus x + 1 afin d'arrêter mon script. Y a-t-il une bonne façon de le faire? – WorkInProgress

+0

qu'en est-il de spawnProcess.kill()? – Shiping

Répondre

0
spawnProcess = subprocess.Popen(['python', 'jukebox_lcd.py'], preexec_fn=os.setsid) 

Tout fonctionne très bien tant pis :)