我正在使用 raspberry-pi 开展一个项目,并希望检测到按下 pi 上的按钮以启动程序(squeezelite https://code.google.com/p/squeezelite/),然后在按下按钮时再次使用程序启动时捕获的 PID 杀死程序。我认为 python subprocess 模块是一个不错的选择,但是,我遇到了一个我无法解决的问题。
编码:
proc=subprocess.Popen(['squeezelite','-o','sysdefault:CARD=ALSA','-n','test','-m', '01:00:00:00:00:03','-z'])
似乎启动了两个进程:
2886 pts/0 Z+ 0:00 [squeezelite] defunct
2887 ? SLsl 0:00 squeezelite -o sysdefault:CARD=ALSA -n test -m 01 00 00 00 00 03 -z
proc.pid 返回第一个的 PID。
如果我调用 proc.communicate() 则第一个进程被清理,我只剩下第二个进程,顺便说一句,这是我想要的。但是,我不知道第二个进程的 PID(因为 proc.pid 给了我第一个现在已经消失的)。所以我不能在 kill 命令中使用 PID。
我尝试了 subprocess.Popen 与不同选项的各种组合(例如字符串参数、参数参数、shell=True、shell=False),每个组合都给出了相似的结果。
任何人都可以帮助我让它工作吗?还是启动程序并在以后杀死它的更好方法?
谢谢澳洲人