def getWifiPassword(self, ssid): def CFDictionaryAddStringKeyValue(d, k, v): if type(v) is not bool: ck = CoreFoundation.CFStringCreateWithBytes( None, k, len(k), 0, 0) cv = CoreFoundation.CFStringCreateWithBytes( None, v, len(v), 0, 0) CoreFoundation.CFDictionaryAddValue(d, ck, cv) CoreFoundation.CFRelease(ck) CoreFoundation.CFRelease(cv) else: ck = CoreFoundation.CFStringCreateWithBytes( None, k, len(k), 0, 0) CoreFoundation.CFDictionaryAddValue(d, ck, v) CoreFoundation.CFRelease(ck) query = CoreFoundation.CFDictionaryCreateMutable(None, 0, None, None) CFDictionaryAddStringKeyValue(query, kSecClass, kSecClassGenericPassword) CFDictionaryAddStringKeyValue(query, kSecAttrAccount, ssid.encode("utf-8")) CFDictionaryAddStringKeyValue(query, kSecReturnData, kCFBooleanTrue) _, keychain_item = Security.SecItemCopyMatching(query, None) try: return keychain_item.bytes().tobytes().decode("utf-8") except AttributeError: print("Could not find wifi password for ssid {}. Please enter it". format(ssid)) return getpass.getpass()