2010-03-13 33 views

Trả lời

7

Py-cputemp dường như thực hiện công việc.

+0

py-cputemp cơ bản là một veneer mỏng trên/proc/acpi/thermal_zone. Điều này ban đầu đã không làm việc cho tôi cho đến khi tôi nhận ra rằng tôi cần phải kích hoạt ACPI trong BIOS của tôi. Tôi đã vô hiệu hóa nó bởi vì tôi figured tôi không muốn quản lý năng lượng trên một máy chủ. Cảm ơn câu trả lời; Tôi chấp nhận điều này bởi vì nó đã được đăng đầu tiên và dẫn tôi đến suy nghĩ về nguồn gốc của vấn đề của tôi. – jamieb

+0

Đây không phải là câu trả lời. – GLHF

+0

Thư viện này không được duy trì và thậm chí không được đăng ký trong PyPI ... – Cerin

2

Tùy thuộc vào bản phân phối Linux của bạn, bạn có thể tìm thấy tệp dưới /proc chứa thông tin này. Ví dụ: this page đề xuất /proc/acpi/thermal_zone/THM/temperature.

0

Bạn có thể thử mô-đun PyI2C, nó có thể đọc trực tiếp từ hạt nhân.

8

Nếu Linux của bạn hỗ trợ ACPI, hãy đọc pseudo-file /proc/acpi/thermal_zone/THM0/temperature (đường dẫn có thể khác nhau, tôi biết nó là /proc/acpi/thermal_zone/THRM/temperature trong một số hệ thống) nên làm điều đó. Nhưng tôi không nghĩ rằng có một cách hoạt động trong mỗi hệ thống Linux trên thế giới, vì vậy bạn sẽ phải cụ thể hơn về chính xác những gì Linux bạn có! -)

1

Thay vào đó bạn có thể cài đặt lm-cảm biến gói, sau đó cài đặt PySensors (một python ràng buộc cho libsensors).

+0

Thật không may PySensors chỉ chạy theo phiên bản Python 2.x –

12

Có một số newer API (xem thêm LWN articleLinux kernel doc) hiển thị nhiệt độ dưới ví dụ:

/sys/class/thermal/thermal_zone0/temp 

Bài đọc bằng nghìn phần trăm độ Celcius (mặc dù ở các hạt cũ hơn, nó có thể chỉ là độ C).

5

Đọc các tệp trong /sys/class/hwmon/hwmon */temp1_ * có tác dụng đối với tôi nhưng AFAIK không có tiêu chuẩn để thực hiện việc này một cách rõ ràng. Dù sao, bạn có thể thử điều này và đảm bảo nó cung cấp cùng một số CPU được hiển thị bằng "cảm biến" tiện ích cmdline, trong trường hợp này bạn có thể giả sử nó đáng tin cậy.

from __future__ import division 
import os 
from collections import namedtuple 


_nt_cpu_temp = namedtuple('cputemp', 'name temp max critical') 

def get_cpu_temp(fahrenheit=False): 
    """Return temperatures expressed in Celsius for each physical CPU 
    installed on the system as a list of namedtuples as in: 

    >>> get_cpu_temp() 
    [cputemp(name='atk0110', temp=32.0, max=60.0, critical=95.0)] 
    """ 
    # http://www.mjmwired.net/kernel/Documentation/hwmon/sysfs-interface 
    cat = lambda file: open(file, 'r').read().strip() 
    base = '/sys/class/hwmon/' 
    ls = sorted(os.listdir(base)) 
    assert ls, "%r is empty" % base 
    ret = [] 
    for hwmon in ls: 
     hwmon = os.path.join(base, hwmon) 
     label = cat(os.path.join(hwmon, 'temp1_label')) 
     assert 'cpu temp' in label.lower(), label 
     name = cat(os.path.join(hwmon, 'name')) 
     temp = int(cat(os.path.join(hwmon, 'temp1_input')))/1000 
     max_ = int(cat(os.path.join(hwmon, 'temp1_max')))/1000 
     crit = int(cat(os.path.join(hwmon, 'temp1_crit')))/1000 
     digits = (temp, max_, crit) 
     if fahrenheit: 
      digits = [(x * 1.8) + 32 for x in digits] 
     ret.append(_nt_cpu_temp(name, *digits)) 
    return ret 
0

Sysmon hoạt động tốt. Được chế tạo độc đáo, nó hoạt động nhiều hơn đo nhiệt độ CPU. Nó là một chương trình dòng lệnh và ghi lại tất cả dữ liệu mà nó đo được vào một tệp. Ngoài ra, nó là mã nguồn mở và được viết bằng python 2.7.

SYSMON: https://github.com/calthecoder/sysmon-1.0.1

2

Gần đây tôi đã thực hiện điều này trong psutil cho Linux mà thôi.

>>> import psutil 
>>> psutil.sensors_temperatures() 
{'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)], 
'asus': [shwtemp(label='', current=47.0, high=None, critical=None)], 
'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0), 
       shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0), 
       shwtemp(label='Core 1', current=52.0, high=100.0, critical=100.0), 
       shwtemp(label='Core 2', current=45.0, high=100.0, critical=100.0), 
       shwtemp(label='Core 3', current=47.0, high=100.0, critical=100.0)]} 
3

Look sau pyspectator trong pip

Chú ý: Yêu cầu python> = 3,0

from pyspectator import Cpu 
from time import sleep 
cpu = Cpu(monitoring_latency=1) 

while True: 
    print cpu.temperature 
    sleep(1) 
Các vấn đề liên quan