Python:新的Mac更新改变了一切
我刚刚更新了mac的osx。 在更新之前,请执行以下程序: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(
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)