繁体   English   中英

停止在类中执行的子流程

[英]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。

有解决此问题的其他方法吗?

提前致谢。

只需使用self对象将alarmpi定义为类的成员即可存储它,以便您可以在stop方法中对其进行调用(在类构造函数中先对其进行定义,这样就可以在不先调用play情况下调用stop

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM