我在我的rpi上制作gpio脚本,我想要一个核心程序来运行并杀死另一个python脚本。
我找不到如何做到这一点的解释但最终找到了这个解决方案:How to terminate a python subprocess launched with shell=True。所以我的代码是:
# // 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)
它将返回例如pid:5030但不会关闭液晶显示屏...... 我需要杀死的过程是5031:
volumio@volumio:~$ 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
我不明白为什么我的子进程运行“/ bin / sh -c python myscript”以及如何解决这个问题。有什么帮助吗?
答案 0 :(得分:0)
spawnProcess = subprocess.Popen(['python', 'jukebox_lcd.py'], preexec_fn=os.setsid)
一切都工作得很好,没关系:)。