Вызов функции из платформы MacOS (например, IntelPowerGadget)Python

Программы на Python
Ответить
Anonymous
 Вызов функции из платформы MacOS (например, IntelPowerGadget)

Сообщение Anonymous »

Скажу сразу — это мой второй день работы с Python. Так что вопрос, наверное, простой. Но вот уже 2 дня не могу найти на него ответа.
Хочу использовать функции из фреймворка MacOS (IntelPowerGadget).
На данный момент я написал следующее

Код: Выделить всё

if sys.platform == 'darwin':
bundle = objc.loadBundle(
"IntelPowerGadget",
bundle_path="/Library/Frameworks/IntelPowerGadget.framework",
module_globals=globals(),
)
functions = [('PG_Initialize', objc._C_VOID),]
#('PG_ReadSample',...),
#('PGSample_GetPackageTemperature',...)]
objc.loadBundleFunctions(bundle, globals(), functions)
PG_Initialize()
Не могу понять, как правильно описать и вызвать PG_ReadSample (bool PG_ReadSample(int iPackage, PGSampleID* sampleID)) и PGSample_GetPackageTemperature(bool PGSample_GetPackageTemperature(PGSampleID sampleID, double* temp)) .
Я тоже не могу найти достаточно документации (буду признателен за ссылки - если Я не там ищу).
upd с ответом @ali-saberi:

Код: Выделить всё

import objc
import ctypes
import sys

if sys.platform == 'darwin':
# Load the Intel Power Gadget framework
bundle = objc.loadBundle(
"IntelPowerGadget",
bundle_path="/Library/Frameworks/IntelPowerGadget.framework",
module_globals=globals(),
)

# Define PGSampleID as ctypes type (assuming it's an integer or a pointer type)
PGSampleID = ctypes.c_void_p  # Assuming PGSampleID is a pointer. Adjust if it's another type.

# Define the functions
functions = [
('PG_Initialize', objc._C_BOOL),
('PG_ReadSample',  objc._C_BOOL + objc._C_INT + objc._C_PTR + objc._C_ULNG_LNG),
('PGSample_GetPackageTemperature', objc._C_BOOL + objc._C_ULNG_LNG + objc._C_PTR + objc._C_DBL),
]

# Load the functions
objc.loadBundleFunctions(bundle, globals(), functions)

# Initialize the library
if not PG_Initialize():
print("Failed to initialize Intel Power Gadget")
sys.exit(1)

# Use PG_ReadSample
sample_id = PGSampleID()  # Placeholder for PGSampleID pointer
iPackage = 0  # Assume we're reading from package 0

if PG_ReadSample(iPackage, ctypes.byref(sample_id)):
print("Sample read successfully")

# Use PGSample_GetPackageTemperature
temperature = ctypes.c_double()
if PGSample_GetPackageTemperature(sample_id, ctypes.byref(temperature)):
print(f"Package Temperature: {temperature.value}°C")
else:
print("Failed to get package temperature")
else:
print("Failed to read sample")
возникла ошибка «if PG_ReadSample(iPackage, ctypes.byref(sample_id)):»:

»ValueError: депитонификация «указателя», получен «CArgObject» '"

Подробнее здесь: https://stackoverflow.com/questions/793 ... owergadget
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»