2015-02-08 2 views
0

Почему это не работает? Я пытаюсь установить переменную python, равную коду applescript.Переменные AppleScript в Python

from os import system 
cmd = """osascript<<END 
    tell application "SpeechRecognitionServer" 
    set theResponse to listen for {"good", "bad", "weather"} 
    end tell 
    END""" 
response = str(system(cmd)) 
print response 
if response == "good": 
    print "Ok" 
+0

Что вы имеете в виду под «не работает». Одна вещь, которую я вижу, это то, что END должен начинаться с начала строки, а не с отступа. –

+0

Попробуйте запустить его, и вы поймете, что я имею в виду. – perk

ответ

1

Согласно документации Python, os.system() только возвращает код выхода; любой выход идет до stdout. Вместо этого используйте subprocess. Вот пример here.

Если вам нужно передать более сложные аргументы или вызвать специальные обработчики, другой вариант - использовать NSAppleScript через PyObjC; есть обертка для удобства here.

+0

Большое вам спасибо !!!!! Это очень помогло. – perk

0

Это самый простой способ, чтобы получить результаты от AppleScript в Python:

from Foundation import NSAppleScript 

textOfMyScript = """ 
tell application "SpeechRecognitionServer" 
    set theResponse to listen for {"good", "bad", "weather"} 
end tell 
""" 
myScript = NSAppleScript.initWithSource_(NSAppleScript.alloc(), textOfMyScript) 
results, err = myScript.executeAndReturnError_(None) 

myWord = results.stringValue() 
if myWord == "good": 
    print ("OK") 

Если компания Apple Event возвращает более чем одну вещь, то вам нужно использовать:

myData = results.descriptorAtIndex_(2).stringValue() 

где 2 является индексом (начиная с 1). Вероятно, вам понадобится некоторая обработка ошибок.

0

Это работает для меня, после включения диктовку системных предпочтений и выбора расширенной диктант

from os import system 
cmd = """osascript<<END 
tell application "SpeechRecognitionServer" 
set theResponse to listen for {"good", "bad", "weather"} 
end tell 
""" 
response = str(system(cmd)) 
    print(response) 
if response == "good": 
    print("Ok") 
Смежные вопросы