2016-01-17 3 views
0

Я пытаюсь получить использование процессора моей малины Pi через программу Python.String cut в Python с странным поведением

Следующая Баш заявление отлично работает:

top -n1 | grep %Cpu  
%Cpu(s): 35.6 us, 15.6 sy, 0.0 ni, 47.3 id, 0.1 wa, 0.0 hi, 1.4 si, 0.0 st 

Однако, когда я пытаюсь вырезать кусок информации, мне нужно в моей программе Python, что-то странное происходит. Левый ограничитель работает отлично, однако право один делает мой результат исчезает (только пробелы возвращаются)

def get_cpu_utilization(): 
    statement = "top -n1 | grep %Cpu" 
    result = check_output(statement, shell=True) 
    # result = result[8:] this works! 
    # result = result[:14] doesn't work! 
    #The statement below doesn't work either 
    result = result[8:14] 
    print(result) 

Опять все я получаю являются заготовки ...

Что я здесь делаю неправильно?

EDITED 1:

Выполнение кода на моем Mac работает отлично:

Python 2.7.10 (v2.7.10:15c95b7d81dc, May 23 2015, 09:33:12) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> result = "%Cpu(s): 39.3 us, 15.8 sy, 0.0 ni, 43.4 id, 0.1 wa, 0.0 hi, 1.3 si, 0.0 st" 
>>> print(result[8:14]) 
39.3 
>>> 

РЕДАКТИРОВАНИЕ 2:

Шаг за шагом для вас, чтобы увидеть, что происходит:

from subprocess import check_output 


def get_cpu_utilization(): 
    statement = "top -n1 | grep %Cpu" 
    result = check_output(statement, shell=True) 
    print(result) 
    result = result[8:] 
    print(result) 
    result = result[:6] 
    print(result) 
    result = result.strip() 
    print repr(result) 
    return result 

Это то, что я получаю:

[email protected] $ sudo python cpu.py 
%Cpu(s): 30.8 us, 15.2 sy, 0.0 ni, 52.6 id, 0.1 wa, 0.0 hi, 1.3 si, 0.0 st 

30.8 us, 15.2 sy, 0.0 ni, 52.6 id, 0.1 wa, 0.0 hi, 1.3 si, 0.0 st 



[email protected] $ 
+0

Что не работает - что это ваш ожидаемый выход? Я получаю 'result [8:14] == 35.6'. – AChampion

+0

Температура. Так же, как и вы. – Bob

+0

Можете ли вы попробовать проверить объект «результат», прежде чем разрезать его? – jianweichuah

ответ

0

Похоже, что между ними какие-то специальные символы. Как правило, использование фиксированных индексов для этой проблемы не очень хорошо, потому что иногда у вас также могут быть меньшие цифры.

Я использовал следующий метод, который работает хорошо:

statement = "top -n1 | grep %Cpu" 
result = check_output(statement, shell=True).split() 
print result[1] // this is the string representing the value you want 
print float(result[1]) // conversion to float works, in case you want 

вычислять что-то от него

Смежные вопросы