Как я могу установить таймер для управления вызовом функции внутри цикла?

У меня есть это function, который играет Spotify:

#a function to play Spotify
def play(id_):
    print 'playing', id_
    os.system("osascript -e 'tell application \"Spotify\" to play track \"%s\"'" % (id_,))

и следующее loop, который перебирает все playlist песни, получает все воспроизводимые ids (foreign_id), передавая их play(id_),

и проходит каждую песню duration в time.sleep() чтобы остановить цикл до конца каждой песни, повторяя цикл снова и снова:

for i, song in enumerate(song_playlist):
            #we need to track each song id
            song_id = song_playlist[i]['id']
            #in order to get song 'duration', access 'song/profile response' and pass the id as an argument
            response_profile = en.get('song/profile', id=song_id, bucket="audio_summary")
            song_profile = response_profile['songs']
            dur = song_profile[0]['audio_summary']['duration']
            #convert to miliseconds     
            dur *= 1000
            print int(round(dur))                           
            #now we access each song 'foreign_id' 
            for track in song:
                track = song['tracks'][i]
                track_id = track['foreign_id'].replace('-WW', '')           
            print '{0} {2} {1}'.format(i, song['artist_name'], song['title'])
            #call the function for each track
            play(track_id) #CALL FUNCTION HERE
            time.sleep(int(round(dur))) # SET INTERVAL CALL TO EACH SONG DURATION

однако, только одна песня играет, и рекурсия умирает.

как я могу исправить код, чтобы у меня была функция, воспроизводящая все дорожки в последовательности, выполняющей код только один раз?

1 ответ

Это выглядит как play(track_id) должен быть внутри for track in song петля. Вам нужно сделать отступ на 1 уровень.

for i, song in enumerate(song_playlist):
    # Code as before ...
    for track in song:
        track = song['tracks'][i]
        track_id = track['foreign_id'].replace('-WW', '')           
        print '{0} {2} {1}'.format(i, song['artist_name'], song['title'])
        play(track_id) #CALL FUNCTION HERE
    time.sleep(int(round(dur))) # SET INTERVAL CALL TO EACH SONG DURATION
Другие вопросы по тегам