Как создать скрипт для связки ключей через rb-appscript?

#ruby #applescript #keychain #rb-appscript

#ruby #applescript #связка ключей #rb-appscript

Вопрос:

Я следил за документами и написал:

 require 'rubygems'
require 'appscript'

loginKeychain = Appscript::app('Keychain Scripting').keychains['login.keychain']
userName = loginKeychain.keys[its.name.eq(name)].password.get
  

ОБНОВЛЕНИЕ: если я запускаю скрипт через терминал, он завершается успешно с первого раза, а затем возвращает приведенную ниже ошибку, пока я не завершу работу и не перезапущу терминал; и повторите…

Ошибка, возвращаемая с перерывами:

 /Library/Ruby/Gems/1.8/gems/rb-appscript-0.5.3/lib/appscript.rb:539:in `_send_command': CommandError (Appscript::CommandError)
        OSERROR: -600
        MESSAGE: Application isn't running.
        COMMAND: app("/System/Library/ScriptingAdditions/Keychain Scripting.app").keychains["login.keychain"].keys[its.name.eq("a name")].password.get()
  

ОБНОВЛЕНИЕ 2: Из-за загадочной ошибки и того, что сценарий связки ключей в целом кажется глючным, я решил использовать MacRuby. Я нашел MacRuby выступает брелок оболочки библиотека, которая призывает брелок услуг напрямую, а не через скрипты:

 require 'keychain-wrapper/keychain'
MRKeychain::GenericItem.item_for_service(service_name).password
  
  • Легко
  • Более эффективный
  • Работает безупречно

Выполнено.

Ответ №1:

Я не использовал Ruby, но я использовал Python, и у меня нет проблем. Я бы попробовал использовать обычный Applescript и посмотреть, может ли он получить доступ к Keychain Scripting. Если нет, попробуйте перезагрузить свой Mac. Но это звучит скорее как проблема вашего компьютера, чем Appscript.

Комментарии:

1. Вы успешно создали сценарий связки ключей с использованием Python? Applescript отлично работал в редакторе AppleScript — я создал его прототип там, прежде чем переводить на Ruby.

2. Да — я провел небольшой тест с Python amp; Appscript. Попробуйте использовать ASTranslate и щелкните флажок, чтобы отправить фактические события в приложение. Извините, я не могу помочь напрямую с Ruby. Я разбираюсь в Python и просто не знаю Ruby.

3. Как вы запускали свой скрипт на Python? В терминале произошло то же самое, когда я выполнил: <pre> $ python >>> из appscript import * >>> app(‘Keychain Scripting’). цепочки ключей[‘login. связка ключей’].ключи[its.name == ‘name’].password.get() </pre>

4. Я запустил его из Textmate. Но это не должно иметь значения. Похоже, что ваш appscript может быть заблокирован. Попробуйте переустановить.

Ответ №2:

Я получаю ту же ошибку, но только с вещами, требующими аутентификации:

 
kc = app("Keychain Scripting").keychains["login.keychain"]
p kc.keys[its.name.eq("loginwindow")].name.get
# ["loginwindow"]
p kc.keys[its.name.eq("loginwindow")].password.get
# ... Application isn't running ...
  

tell app "Keychain Scripting" to password of keys of keychain "login.keychain" where name is "loginwindow" работает просто отлично.