Как получить процент заряда батареи ноутбука MacOS с помощью скрипта Python? - PullRequest
0 голосов
/ 08 июня 2018

Мы можем использовать команду оболочки pmset, чтобы получить параметры управления питанием компьютера Mac.

Например, чтобы найти процент заряда батареи:

pmset -g batt | grep -Eo "\d+%" | cut -d% -f1

Дает процент заряда батареи отноутбук.

Когда я запускал ту же команду в python, используя команду os.system, она работает нормально и печатает процент заряда батареи.Проблема в том, что мы не можем получить вывод от терминала.

# This runs fine
os.system('pmset -g batt | grep -Eo "\d+%" | cut -d% -f1')

Когда я использую subprocess.check_output, он не работает по той же команде:

# This fails
subprocess.check_output('pmset -g batt | grep -Eo "\d+%" | cut -d% -f1')

Вот моя попытка:

#!python
import subprocess
import os

# This runs fine.
cmd = "date"
returned_output = subprocess.check_output(cmd).decode("utf-8")
# print('Current date is:', returned_output)

# This runs fine.
cmd = 'pmset -g batt | grep -Eo "\d+%" | cut -d% -f1'
os.system(cmd)

# This fails
cmd = 'pmset -g batt | grep -Eo "\d+%" | cut -d% -f1'
returned_output = subprocess.check_output(cmd)
print('Battery percentage:', returned_output.decode("utf-8"))

Журнал ошибок

FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/pmset -g batt': '/usr/bin/pmset -g batt'

Вопрос Как заставить эту строку работать?

subprocess.check_output('pmset -g batt | grep -Eo "\d+%" | cut -d% -f1')

1 Ответ

0 голосов
/ 08 июня 2018

Я нашел способ, используя метод shell=True, что не очень хорошо по соображениям безопасности.

#!python
import subprocess


cmd = 'pmset -g batt | grep -Eo "\d+%" | cut -d% -f1'
ps = subprocess.Popen(
    cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = ps.communicate()[0]
print(output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...