Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Выполнение python скрипта из screenrc  (Прочитано 838 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vladimirse

  • Автор темы
  • Новичок
  • *
  • Сообщений: 35
    • Просмотр профиля
Выполнение python скрипта из screenrc
« : 25 Ноября 2017, 20:34:00 »
Доброго времени суток!
В конфиге screen можно использовать сторонние bash-скрипты для получения различной информации, к примеру о состоянии памяти:
backtick 1 0 0 /usr/local/bin/screen-mem-usage
...

Можно ли каким то образом использовать для этих целей python-крипты?
Подобная вышеупомянутой записи не подходит.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Выполнение python скрипта из screenrc
« Ответ #1 : 25 Ноября 2017, 21:15:19 »
Хэшбанг с отсылом к питону в начале питоновского скрипта и сделать файл исполняемым. Такой скрипт можно вызвать как и bashскрипт.

т.е. в начале файла должно быть :
#!/usr/bin/env python3для тетьего питона и
#!/usr/bin/env pythonдля второго.
« Последнее редактирование: 25 Ноября 2017, 21:21:45 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн vladimirse

  • Автор темы
  • Новичок
  • *
  • Сообщений: 35
    • Просмотр профиля
Re: Выполнение python скрипта из screenrc
« Ответ #2 : 25 Ноября 2017, 21:23:50 »
Хэшбанг с отсылом к питону в начале питоновского скрипта и сделать файл исполняемым. Такой скрипт можно вызвать как и bashскрипт.

Да собственно так и делаю.
Сам скрипт:
#!/usr/bin/python

from time import sleep
import re

while(True):
    try:
        meminfo = open('/proc/meminfo', 'r')
    except:
        pass
    memtotal = []
    memfree = []
    for line in meminfo:
        if re.findall("MemTotal:\s+\d+", line):
            memtotal = re.findall("MemTotal:\s+\d+", line)[0].split(' ')[-1:][0]
        if re.findall("MemFree:\s+\d+", line):
            memfree = re.findall("MemFree:\s+\d+", line)[0].split(' ')[-1:][0]
    returnstr = str('{:.3f}'.format(float(memfree)/1000000)) + 'G' + ' ' + \
                str(int((float(memfree)/float(memtotal)) * 100)) + '%'
    print(returnstr)
    meminfo.close()
    sleep(5)

~/.screenrc
startup_message off
deflogin on
vbell on
defscrollback 2048
autodetach on
altscreen on
term screen-256color

backtick 1 0 0 $HOME/.screen/screen-memory-usage.py

hardstatus alwayslastline
hardstatus string '%1` %{= kK}%-Lw%{= KW}%50>%n%f %t%{= kK}%+Lw%< %{=}%{kY}%-= %Y-%m-%d %{kG}%c:%s %{kY}[ %{+b R}Host: %{-b kW}%H%{-b kY} %{+b kR}Load:%{-b kW} %l %{kB}%{-b kY}]%{-}'
defnonblock 5

При зпуске screen получаю:


Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Выполнение python скрипта из screenrc
« Ответ #3 : 25 Ноября 2017, 23:11:39 »
похоже проблема с кодировкой

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Выполнение python скрипта из screenrc
« Ответ #4 : 26 Ноября 2017, 00:19:10 »
Сам скрипт:
Зачем такой говнокод не оптимальный код?
Учитесь писать лаконичный и оптимальный код
Вот мой вариант:
Код: (python) [Выделить]
#!/usr/bin/python

from time import sleep
import re

while(True):
    try:
        with open('/proc/meminfo', 'r') as f:
            res  =  dict(re.findall(r'(MemTotal|MemFree):\s+(\d+)', f.read()))
    except:
        pass
    print('%.3fG %d%%'%(float(res['MemTotal'])/10000000, float(res['MemFree'])/float(res['MemTotal'])*100))
    sleep(5)

PS извините за грубоватую форму, но правда тяжело сдержаться при виде такого кода...
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн vladimirse

  • Автор темы
  • Новичок
  • *
  • Сообщений: 35
    • Просмотр профиля
Re: Выполнение python скрипта из screenrc
« Ответ #5 : 26 Ноября 2017, 14:56:06 »
Учитесь писать лаконичный и оптимальный код
Даку учусь, учусь! Онож с ходу то не получится, нужен стаж. Вот я и пытаюсь везде где только можно питон запихивать.

Пользователь добавил сообщение 26 Ноября 2017, 15:54:40:
Зачем такой говнокод не оптимальный код?
Может посоветуете чего почитать для улучшения говнокода? :-)
« Последнее редактирование: 26 Ноября 2017, 15:54:40 от vladimirse »

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Выполнение python скрипта из screenrc
« Ответ #6 : 26 Ноября 2017, 16:36:46 »
Тут на форуме хорошую книгу переводили с адаптацией на третий питон... надо поискать... Think Python в оригинале называлась...

Пользователь добавил сообщение 26 Ноября 2017, 16:41:22:
Вот - https://forum.ubuntu.ru/index.php?topic=218329.0
« Последнее редактирование: 26 Ноября 2017, 16:41:22 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн vladimirse

  • Автор темы
  • Новичок
  • *
  • Сообщений: 35
    • Просмотр профиля

 

Страница сгенерирована за 0.042 секунд. Запросов: 25.