Python:新的Mac更新改变了一切

Python:新的Mac更新改变了一切,python,macos,cocoa,loops,time,Python,Macos,Cocoa,Loops,Time,我刚刚更新了mac的osx。 在更新之前,请执行以下程序: from Cocoa import NSSpeechSynthesizer import time sp = NSSpeechSynthesizer.alloc().initWithVoice_(None) def say(x): sp.startSpeakingString_(x) while sp.isSpeaking(): time.sleep(0.1) while True: say(

我刚刚更新了mac的osx。 在更新之前,请执行以下程序:

from Cocoa import NSSpeechSynthesizer
import time

sp = NSSpeechSynthesizer.alloc().initWithVoice_(None)

def say(x):
    sp.startSpeakingString_(x)
    while sp.isSpeaking():
        time.sleep(0.1)
while True:
    say("chocolate")
    say("vanilla")    
会让我的电脑一遍又一遍地说“巧克力香草”

但现在在更新之后,似乎是(应该等到它的发言结束后再继续下一件事)

在循环结束时被遗忘,计算机只是一遍又一遍地重复
vanilla


(我知道我可以做
说(“巧克力,香草”)
但这不是问题。这是关于循环在循环中时被遗忘的问题)

首先,你从哪个版本的OS X更新,更新到哪个版本?另外,您是否在使用苹果公司预装的Python和PyObjC?其次,您在这里发布的代码缩进显然是错误的,因为它会在第一次调用
say
时引发
缩进错误。如果实际代码中的缩进(我们看不到)是错误的,那么很容易导致您看到的问题。(例如,如果
while
被添加到页边空白处,它将只在启动主循环之前等待,而不是在
中的每一次,比如说
)顺便说一句,如果您的实际程序是带有
nsrunlop
的普通Cocoa应用程序,你可能要考虑设置一个委托,用于<代码> Script合成>,而不是轮询代码< >代码/>代码>属性。AbnNeRT对不起,我修改了缩进,我刚才把它放错了。我使用预先安装的Python2.7.6来运行脚本,但我使用安装的Python2.7.6中的IDLE来键入脚本。至于pyobjc,我相信我正在使用它,我记得为了使用NSSpeechSynthesis,我在appkit中安装了类似的东西。我从小牛队更新到约塞米蒂。好吧,你的答案令人困惑。如果您安装了另一个Python2.7.6以使其处于空闲状态,那么当您在空闲状态下运行时使用的是另一个Python2.7.6,当您从命令行运行时使用的可能是另一个Python2.7.6,这取决于您运行脚本的方式以及
$PATH
的外观。能否在脚本顶部导入系统
和打印系统可执行文件?同时,PyObjC是包含
Cocoa
AppKit
的包;苹果在Python中预装了它,但大多数其他Python安装都不包括它。您能否
导入objc
打印objc.\uuuuuu版本\uuuuuu
while sp.isSpeaking():
    time.sleep(0.1)