Search code examples
python-3.xlinuxpipraspberry-pi3

Split results in Python for CPU usage


Been trying to get this to work for a few hours now. Nothing I try is splitting this text up. I only want the Current CPU from this

>>> from __future__ import print_function
>>> from urllib.request import urlopen
>>> import json
>>> import subprocess
>>> import requests
>>> import random
>>> import sys
>>> import os
>>> import time
>>> import datetime
>>> import MySQLdb as my
>>> import psutil
>>> os.popen('vcgencmd measure_temp').readline()
"temp=52.0'C\n"
>>> cpu = psutil.cpu_freq()
>>> cpu = cpu.split('current=')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'scpufreq' object has no attribute 'split'
>>> psutil.cpu_freq()
scpufreq(current=600.0, min=600.0, max=1500.0)
>>> psutil.cpu_freq(percpu=True)
[scpufreq(current=600.0, min=600.0, max=1500.0)]
>>> cpu = psutil.cpu_freq(percpu=True)
>>> cpu.split('=')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'split'
>>> AttributeError: 'list' object has no attribute 'split'
  File "<stdin>", line 1
    AttributeError: 'list' object has no attribute 'split'
                                ^
SyntaxError: invalid syntax
>>> AttributeError: 'list' object has no attribute 'split'
  File "<stdin>", line 1
    AttributeError: 'list' object has no attribute 'split'
                                ^
SyntaxError: invalid syntax
>>> psutil.cpu_freq(percpu=True).readline()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'readline'
>>> cpu = psutil.cpu_freq()

Where am I going wrong with this?

OS: Rasbian Buster Python: python3 PIP: pip3


Solution

  • It looks mostly like you're ignoring your error messages:

    >>> cpu = psutil.cpu_freq()
    >>> cpu = cpu.split('current=')
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    AttributeError: 'scpufreq' object has no attribute 'split'
    

    The return value from psutil.cpu_freq() isn't a string, so it doesn't have a split method. If you just print the value...

    >>> cpu
    scpufreq(current=700.0, min=700.0, max=800.0)
    

    ...you get some idea of what attributes it has, and indeed, we can access those values like this:

    >>> cpu.current
    700.0
    >>> cpu.max
    800.0
    

    When you set percpu=True, you're getting back a list:

    >>> psutil.cpu_freq(percpu=True)
    [scpufreq(current=600.0, min=600.0, max=1500.0)]
    

    And once again, a list isn't a string, so there's no split method. Since there's only a single CPU, you get back a 1-item list, so you can access values like this:

    >>> cpu = psutil.cpu_freq(percpu=True)
    >>> cpu[0].current
    700.0