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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

Оффлайн vladimirse

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

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

Оффлайн Sly_tom_cat

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

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

Оффлайн vladimirse

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Выполнение python скрипта из screenrc
« Ответ #2 : 25 Ноябрь 2017, 22: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

  • Старожил
  • *
  • Сообщений: 1837
    • Просмотр профиля
Re: Выполнение python скрипта из screenrc
« Ответ #3 : 26 Ноябрь 2017, 00:11:39 »
похоже проблема с кодировкой
Скрипты на bash,sh,perl,awk + разная помощь (в ЛС)

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11438
  • Xubuntu 16.04 (64bit)
    • Просмотр профиля
Re: Выполнение python скрипта из screenrc
« Ответ #4 : 26 Ноябрь 2017, 01:19:10 »
Сам скрипт:
Зачем такой говнокод не оптимальный код?
Учитесь писать лаконичный и оптимальный код
Вот мой вариант:
Код: Python
  1. #!/usr/bin/python
  2.  
  3. from time import sleep
  4. import re
  5.  
  6. while(True):
  7.     try:
  8.         with open('/proc/meminfo', 'r') as f:
  9.             res  =  dict(re.findall(r'(MemTotal|MemFree):\s+(\d+)', f.read()))
  10.     except:
  11.         pass
  12.     print('%.3fG %d%%'%(float(res['MemTotal'])/10000000, float(res['MemFree'])/float(res['MemTotal'])*100))
  13.     sleep(5)
  14.  

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

Оффлайн vladimirse

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

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

Оффлайн Sly_tom_cat

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

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

Оффлайн vladimirse

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

 

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