1

我打算发布一个示例,但我说搞砸了,我只是发布我所拥有的。对我放轻松。我习惯了红宝石。Python 对我来说是全新的。

我有一个名为 que 的文件,其中包含一堆歌曲。我想创建一个后台线程,不断检查 que 中是否有任何歌曲。如果其中有歌曲,则在第一行播放歌曲,然后删除第一行。(.que.swp)。

现在的问题是,我不知道如何在后台完成这一切。我有另一个类允许用户将歌曲添加到 que 文件中。所以它们需要同时运行。

class MusicPlayer(threading.Thread):

    def __init__(self):
        super(MusicPlayer, self).__init__()
        self.que_file = "que"
        self.playQue()

    def playQue(self):

        while 1:
            try:
                f = open(self.que_file, "r")
                songUp = f.readline()
                songUp = songUp.rstrip()
                cmd = "cvlc \"%s\" vlc://quit &>/dev/null" % (songUp)
                os.system(cmd)
                data="".join(open(self.que_file).readlines()[1:-1])
                open(".que.swp","wb").write(data)
                os.remove(self.que_file)
                os.rename(".que.swp", self.que_file)
                print "\n%s added %s to the que" % (self.user, self.dir)
            except:
                print "No Que File Exists"
                time.sleep(1)

#main#          
if __name__ == '__main__':
    player = MusicPlayer()
    player.start()
    print "helloWorld"

“helloworld”从不打印到终端。它只是不断循环我的课程。ps - 如果它让你感觉更好,你可以清理我的任何丑陋的命令。记住我是新人。我已经在这几个小时了,并求助于询问。

4

1 回答 1

1

循环不是从player.start()您可能猜到的那行开始,而是从以下行开始:

player = MusicPlayer()

这是因为您调用self.playQue(). __init__如果删除该行并将方法名称更改playQuerun,则线程应单独运行。

有关和的描述,请参见threading 包的说明:startrun

开始()

启动线程的活动。

每个线程对象最多只能调用一次。它安排在单独的控制线程中调用对象的 run() 方法。

于 2013-04-17T00:38:08.650 回答