2012-07-08 55 views
0

我试图与applescript一起检索歌曲的BPM值。最终我想用游戏来实现它。这里是我的代码:Python osascript返回0它似乎

import os 
import time 
import sys 


def getBPM(): 
    iTunesInstruct = """' 
    tell application "iTunes" 
    set k to get bpm of current track 
    end tell 
    return k 
    '""" 
    bpm = os.system('arch -i386 osascript -e ' + iTunesInstruct) 
    #bpm =90 

    bpm = int(bpm) 
    bpm = round(bpm) 

    if bpm > 250: 
     bpm = 200 
    return bpm 


def getBeatSecond(bpm): 
    bps = float(bpm)/60 
    #raw_input(bps) 
    return float(bps) 

i = 0 

beatMatch = True 

while True: 
    beat = 1/getBeatSecond(getBPM()) # BPS Beat divided by a second. 

    if beatMatch: 
     time.sleep(beat) 
     print beat 
    else: 
     raw_input('Go??') 
    i += 1 
    if i > 50: 
     break 

但这似乎只能使用一次......它让我在听歌曲的BPM,看到是94,然后似乎就可以认为这是第二次迭代0,然后它除以0并死亡。这是怎么回事?

回答

1

os.system不等待命令完成。

=是osascript的结果, =没有故障,则退出状态(使用os.system)。

使用subprocess.Popen

from subprocess import Popen, PIPE 

def getBPM(): 
    cmd = "arch -i386 osascript -e " + """'tell application "iTunes" to return bpm of current track'""" 
    bpm, tError = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate() 
    if bpm > 250: 
     return = 200 
    return int(bpm) 
+0

嘿嘿,谢谢,我不知道什么管道是一回事,或者是任何的意思,但我只是想它和它仍然返回0 .... :( – user1159454 2012-07-09 08:27:22

+0

我不好,这是有效的,只是这首歌没有BPM,我加了一个尝试,谢谢! – user1159454 2012-07-09 09:49:59

相关问题