Как можно написать связку ключей через 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 Keychain Wrapper, которая вызывает Службы цепочки для ключей напрямую, а не через скрипты:

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

Сделанный.


person Sean DeNigris    schedule 22.04.2011    source источник


Ответы (2)


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

person Clark    schedule 22.04.2011
comment
Вы успешно написали связку ключей с помощью Python? Applescript отлично работал в редакторе AppleScript — я создал его прототип перед переводом на Ruby. - person Sean DeNigris; 23.04.2011
comment
Да, я провел небольшой тест с Python и Appscript. Попробуйте использовать ASTranslate и установите флажок, чтобы отправлять фактические события в приложение. Извините, я не могу помочь напрямую с Ruby. Я человек Python и просто не знаю Ruby. - person Clark; 23.04.2011
comment
Как вы запускали свой скрипт Python? В Терминале то же самое произошло, когда я выполнил: ‹pre› $python ›››from appscript import * ›››app('Keychain Scripting').keychains['login.keychain'].keys[its.name == 'имя'].password.get() ‹/pre› - person Sean DeNigris; 24.04.2011
comment
Я запустил его из Textmate. Но это не должно иметь значения. Похоже, ваш appscript может быть недоработан. Попробуйте переустановить. - person Clark; 25.04.2011

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


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" работает нормально.

person Lri    schedule 27.04.2011