Python ile UUID nasıl edinilir?


1

Sistem Raporu, sistemin Donanım UUID'sini 01234567-89ab-cdef-0123-456789abcdef biçiminde görüntüler.

Kabuğu kullanarak aynı UUID'yi alabiliriz:

ioreg -rd1 -c IOPlatformExpertDevice | grep -E '(UUID)'

Bu UUID'yi Python'da bir kabuk komutu yürütmeye başvurmadan almak mümkün müdür?


Programlama soruları burada konu dışı. Bunun yerine StackOverflow'u deneyin.
Gerry,

Yanıtlar:


2

Kısa cevap: pek değil.

Uzun cevap: bir çeşit, ancak kabuk komutunu bir nedenden dolayı gerçekten kullanamadığınız sürece, muhtemelen değerinden daha fazla sorun olacaktır. OS X, Python'a pek fazla sistem yapılandırması göstermiyor. OS X'i yapılandırmak için kullanılan çoğu komut dosyası arayüzü, kabuk tabanlı veya AppleScript tabanlıdır (ve elbette çeşitli Objective-C API'leri).

UUID'yi almak AppleScript'te mümkündür:

tell application "System Information"
    set profile to system profile
    quit
end tell

set delim to AppleScript's text item delimiters
set AppleScript's text item delimiters to "Hardware UUID: "
set uuid to paragraph 1 of text item 2 of profile
set AppleScript's text item delimiters to delim
uuid

Ancak gördüğünüz gibi, biraz sarsılmış (ve ioregtüm sistem profilini işlemesi gerektiğinden, yöntemden çok daha yavaş ).

AppleScript'i Python'a, Appscript olarak bilinen bir köprü var , ancak artık geliştirilmiyor ve yeni projeler için önerilmez. Ancak, gerçekten kararlıysanız, Appscript'i kullanarak yukarıdaki AppleScript'i Python'a dönüştürebilirsiniz. Ancak dürüst olmak gerekirse, daha kötü bir sonuç almak için çok fazla sorun gibi görünüyor.


1

Yapabiliyorum, ama burada görüldüğü gibi pyobjc kullanıyorum:

https://gist.github.com/pudquick/c7dd1262bd81a32663f0

import objc
from Foundation import NSBundle

IOKit_bundle = NSBundle.bundleWithIdentifier_('com.apple.framework.IOKit')

functions = [("IOServiceGetMatchingService", b"II@"),
             ("IOServiceMatching", b"@*"),
             ("IORegistryEntryCreateCFProperty", b"@I@@I"),
            ]

objc.loadBundleFunctions(IOKit_bundle, globals(), functions)

def io_key(keyname):
    return IORegistryEntryCreateCFProperty(IOServiceGetMatchingService(0, IOServiceMatching("IOPlatformExpertDevice".encode("utf-8"))), keyname, None, 0)

def get_hardware_uuid():
    return io_key("IOPlatformUUID".encode("utf-8"))

Kullanım hedefiniz macOS sistem python ise, Neyse ki Apple zaten her yeni macOS sürümüne pyobjc'yi eklemiştir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.