我打算发布一个例子,但是我说它搞砸了,我只是张贴了我所拥有的。放轻松我。我习惯了红宝石。 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 - 如果它让你感觉更好,你可以清理我任何丑陋的命令。记住我是新人。我已经在这几个小时了,并且已经求助了。
答案 0 :(得分:1)
循环不会像你猜测的那样在player.start()
行开始,而是在行:
player = MusicPlayer()
这是因为您在self.playQue()
中致电__init__
。如果删除该行,并将方法playQue
的名称更改为run
,则该线程应单独运行。
有关start
和run
的说明,请参阅instructions for the threading package:
开始()
开始线程的活动。
每个线程对象最多只能调用一次。它安排了 object的run()方法在一个单独的控制线程中调用。