Как се прави скрипт на Keychain чрез 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: Поради мистериозната грешка и това, че Keychain Scripting изглежда бъгове като цяло, реших да използвам MacRuby. Намерих библиотеката 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 и да видя дали има достъп до Keychain Scripting. Ако не, опитайте да рестартирате вашия Mac. Но това звучи повече като проблем на вашия компютър, отколкото на Appscript.

person Clark    schedule 22.04.2011
comment
Успешно сте скриптирали Keychain с помощта на 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 може да е borked. Опитайте да преинсталирате. - 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