停止在 class 中执行的子进程
Stopping subprocess executing in a class
我正在尝试通过 MPlayer 播放一系列音频文件,它在 Python 中被归类为子进程。
然后调用.stop() 命令时。我希望子进程......好吧..停止执行。
我想继续发生的重要事情是主线程。我不希望 Python 完全终止。
下面是我目前试过的代码。
class Alarm:
urllib.request.urlretrieve(Settings.news_url, 'news.mp3')
tts1 = gTTS(text='Good morning' + Settings.name + 'It is ' + str(date.today()), lang='en')
tts2 = gTTS(text='Here is the latest news from the BBC world service', lang='en')
tts3 = gTTS(text='The weather for today is ' + Settings.weather_rss.entries[0]['title'].split(' ', 1)[1], lang='en')
tts4 = gTTS(text='That is all for now. Have a great day!', lang='en')
tts1.save(Settings.greeting)
tts2.save(Settings.news_intro)
tts3.save(Settings.weather_forecast)
tts4.save(Settings.outtro)
def play(self):
alarmpi = subprocess.call(['mplayer', Settings.greeting, Settings.news_intro, 'news.mp3', Settings.weather_forecast, Settings.outtro]);
def stop(self):
alarmpi.kill()
alarm = Alarm()
on = Thread(target=alarm.play)
stop = Thread(target=alarm.stop)
on.start()
time.sleep(5)
stop.start()
然而,当我 运行 这样做时,我收到一条错误消息,提示未定义 alarmpi。
有没有不同的方法来解决这个问题?
提前致谢。
只需将 alarmpi
定义为 class 的 成员 ,使用 self
对象存储它,以便您可以在 stop
方法(首先在 class 构造函数中定义它,这样你就可以调用 stop
而无需先调用 play
)
def __init__(self):
self.alarmpi = None
def play(self):
self.alarmpi = subprocess.call(['mplayer', Settings.greeting, Settings.news_intro, 'news.mp3', Settings.weather_forecast, Settings.outtro]);
def stop(self):
if self.alarmpi:
self.alarmpi.kill()
self.alarmpi = None
我正在尝试通过 MPlayer 播放一系列音频文件,它在 Python 中被归类为子进程。
然后调用.stop() 命令时。我希望子进程......好吧..停止执行。
我想继续发生的重要事情是主线程。我不希望 Python 完全终止。
下面是我目前试过的代码。
class Alarm:
urllib.request.urlretrieve(Settings.news_url, 'news.mp3')
tts1 = gTTS(text='Good morning' + Settings.name + 'It is ' + str(date.today()), lang='en')
tts2 = gTTS(text='Here is the latest news from the BBC world service', lang='en')
tts3 = gTTS(text='The weather for today is ' + Settings.weather_rss.entries[0]['title'].split(' ', 1)[1], lang='en')
tts4 = gTTS(text='That is all for now. Have a great day!', lang='en')
tts1.save(Settings.greeting)
tts2.save(Settings.news_intro)
tts3.save(Settings.weather_forecast)
tts4.save(Settings.outtro)
def play(self):
alarmpi = subprocess.call(['mplayer', Settings.greeting, Settings.news_intro, 'news.mp3', Settings.weather_forecast, Settings.outtro]);
def stop(self):
alarmpi.kill()
alarm = Alarm()
on = Thread(target=alarm.play)
stop = Thread(target=alarm.stop)
on.start()
time.sleep(5)
stop.start()
然而,当我 运行 这样做时,我收到一条错误消息,提示未定义 alarmpi。
有没有不同的方法来解决这个问题?
提前致谢。
只需将 alarmpi
定义为 class 的 成员 ,使用 self
对象存储它,以便您可以在 stop
方法(首先在 class 构造函数中定义它,这样你就可以调用 stop
而无需先调用 play
)
def __init__(self):
self.alarmpi = None
def play(self):
self.alarmpi = subprocess.call(['mplayer', Settings.greeting, Settings.news_intro, 'news.mp3', Settings.weather_forecast, Settings.outtro]);
def stop(self):
if self.alarmpi:
self.alarmpi.kill()
self.alarmpi = None