首页 > 解决方案 > 如何在 Python 中杀死由 subprocess.Popen 运行的子进程(附代码)

问题描述

首先,我想为我的语言能力提前道歉,我正在尽力把它描述清楚。

[Python 在 Raspberri Pi3 B+ 上运行]

我试图杀死由 subprocess.popen 运行的子进程,我已经厌倦了搜索所有网络,但所有解决方案都对我不起作用。我是初学者,不确定我错过了什么,我认为如果有人能看到我的代码,那就更好了

在这里,我有运行子进程的代码

pid = subprocess.Popen([sys.executable,"01-Subprogram-serial.py"])

01-子程序-serial.py <<我的子程序

这是 raspberri pi 3 b+ 同时用于视频播放和 LED 控制

我正在使用 Tkinter 运行播放视频的按钮命令并使用串行设备控制运行子程序,子程序仅适用于第一次运行的程序,但由于我无法杀死它,即使我更改为另一个命令,子程序仍在运行。

from tkinter import *
from tkinter import messagebox
import os
import sys
import subprocess
import signal
from subprocess import Popen, PIPE
import serial
import time
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=.5)
top = Tk()
movie1 = ("/home/pi/Videos/VID_chap1.mp4")
movie2 = ("/home/pi/Videos/VID_chap2.mp4")
movie3 = ("/home/pi/Videos/VID_chap3.mp4")

def vid1():
   os.system('killall omxplayer.bin')
   omxc = Popen(['omxplayer','--layer','2','--win','0,0,800,481', movie1])
   pid = subprocess.Popen([sys.executable,"01-Subprogram-serial.py"])
#   subprocess.popen.kill(pid) <This not works

def vid2():
   os.system('killall omxplayer.bin')
   omxc = Popen(['omxplayer','--layer','2','--win','0,0,800,481', movie2])
   pid = subprocess.Popen([sys.executable,"02-Subprogram-serial.py"])
#   subprocess.popen.kill(pid) <This not works

def vid3():
   os.system('killall omxplayer.bin')
   omxc = Popen(['omxplayer','--layer','2','--win','0,0,800,481', movie3])
   pid = subprocess.Popen([sys.executable,"03-Subprogram-serial.py"])
#   subprocess.popen.kill(pid) <This not works


B = Button(top, text ="Asean 1", command = vid1)
C = Button(top, text ="Asean 2", command = vid2)
D = Button(top, text ="Asean 3", command = vid3)


B.pack()
C.pack()
D.pack()

top.mainloop()

我想在前一个子进程启动一个新子进程之前杀死它

标签: pythonsubprocesskill

解决方案


推荐阅读