2012-07-08 3 views
0

나는 음악의 BPM 값을 검색하는 데 applescript로 작업하려고합니다. 결국 게임으로 구현하고 싶습니다. 여기에 내 코드입니다 :0을 반환하는 파이썬 osascript가 나타납니다

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 명령이 완료 될 때까지 기다리지 않습니다.

90

0 = = 없음 에러는 종료 상태 ( os.system을)이다 osascript의 결과이다.

사용 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

+0

내 나쁜,이 작품, 그냥 그 노래에 아무 BPM도 없었다. 나는 그것에 대한 시도를 추가했습니다. 감사합니다! – user1159454

관련 문제