首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python osascript似乎返回0

Python osascript似乎返回0
EN

Stack Overflow用户
提问于 2012-07-09 04:02:59
回答 1查看 274关注 0票数 0

我正在尝试使用applescript来检索歌曲的BPM值。最终,我想用游戏来实现它。下面是我的代码:

代码语言:javascript
复制
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,然后就死了。到底怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-09 08:26:06

os.system不等待命令完成。

90 =是osascript的结果, =无错误,是退出状态(os.system)。

使用subprocess.Popen

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11386230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档