LINUX.ORG.RU

Помогите адаптировать команду под Python notify-send | grep

 


1

2

Всем доброго времени. Помогите пожалуйста адаптировать команду notify-send | grep под Python. В Python - дилетант.

Python скрипт рассчитывает значения названия/количества/стоимости с построчным выводом в консоль или в файл >> result-ap.txt

Выводятся следующие значения:

print (nomination[amount] + ' = ' + str(price/1000))

Например: "коробка	2	= 12.80"

Задача выводить построчно через notify-send определённые значения (price/1000), с обрезанием ненужных символов.

Получилось настроить только в Bash и пуляет он всё сразу, так как grep_ает с готового файла, без tail -f, но работает.

В grep -v -w ххх.хх

соответственно подставляются любые «ненужные» значения.

notify-send --urgency=critical "$(echo "123" | grep -v -w 100.0 /home/baza1/result-ap.txt echo 123456789 | rev | cut -c1-13 | rev)" -t 0

Просьба помочь настроить построчный вывод в notify-send или notify2 из терминала в Python скрипте, с текущими настройками. Пробовал так:

import os
import subprocess

os.system ('notify-send "Hello world!" -t 0')

Пример (Hello world!), в скрипте работает без проблем, пишет в файл и выдаёт после каждой строки уведомление: Hello world!

Ну а так конечно не работает:

send = str(price/1000)
os.system ('notify-send  "$(send)" -t 0')

или

os.system ('notify-send  "$(echo "123" | grep -v -w 100.0 echo 123456789 | rev | cut -c1-13 | rev str(price/1000))" -t 0')

Понимаю что нужны print-for-re-split()-rsplit()..., но не понимаю как реализовать... Пробовал ещё Python.sh С notify2 вообще ничего непонятно.

Заранее Благодарен за помощь.

Ну а так конечно не работает:

send = str(price/1000)
os.system ('notify-send  "$(send)" -t 0')

боюсь спросить, а как здесь питон должен понять, что ему надо send подставить? 🤔

os.system ('notify-send  "{}" -t 0'.format(send))
вот так попробуй. и дёргай в цикле уже так, как тебе надо построчно.

Reineke ()
Ответ на: комментарий от Reineke

Благодарю за внимание и помощь.

os.system ('notify-send  "{}" -t 0'.format(send))

Так работает. Подряд построчно. Но с grep -v -w 100.0 - не получается.

os.system ('notify-send  "{grep -v -w 100.0}" -t 0'.format(send))
os.system ('notify-send  "{$grep -v -w 100.0}" -t 0'.format(send))

KeyError: '$grep -v -w 100'

asston ()

Я почти уверен, что сработает вот это незатейливое api

pon4ik ★★★★★ ()
Ответ на: комментарий от asston

В фигурные скобки ничего вставлять нельзя - они в тексте нужны только для того, чтобы питон знал, что в это место надо вставить значение переменной. Вообще не смешивай так баш с питоном - они о друг-друге не знают, по сути, потому оно работать не будет. В идеале вообще пиши скрипт либо на питоне, используя питоньи методы для этого, либо на баше. если не надо выводить строку, когда в send «мусор», добавь ифку, как-то вот так:

import re
if re.search(r'[\d\.]{1,5}', send):
    os.system ('notify-send  "{}" -t 0'.format(send))
А вообще есть чувство, что даже это костыльно, и зная всю задачу более подробно, можно сделать нормальное решение.

Reineke ()
Ответ на: комментарий от Reineke

Благодарю. Не работает. Все пробелы соблюдены (в разных комбинациях). Постоянно ругается на двоеточие в конце send):

Решение где то совсем рядом, но сам точно недопру...

asston ()
Ответ на: комментарий от asston

какой же ты жадный на код :D я надеялся на какой-то снипет хотя бы с функцией, ну да ладно.

Все пробелы соблюдены

точно нигде пробелы с табами не смешаны?

в разных комбинациях

?

Reineke ()
Ответ на: комментарий от Reineke

Да. Пробелы перепроверил не раз.

В разных комбинациях:

if re.search(r'[\d\.]{1,5}', send):
    os.system ('notify-send  "{}" -t 0'.format(send))

    if re.search(r'[\d\.]{1,5}', send):
        os.system ('notify-send  "{}" -t 0'.format(send))

        if re.search(r'[\d\.]{1,5}', send):
            os.system ('notify-send  "{}" -t 0'.format(send))
asston ()

во первых, не используй os.system, используй subprocess.call.

во вторых, не используй notify-send, используй pydbus

https://github.com/LEW21/pydbus смотри самый первый пример как слать уведомления через pydbus.

eternal_sorrow ★★★★★ ()

хоспади што тут происходит?

тебе что нужно вывести-то? цену, если она не равна 100?

def notify_send_price(price):
    p = price / 1000
    if p != 100:
        os.system(f'notify-send -t 0 {price:.1f}')

...
notify_send_price(price)
...
anonymous ()
Ответ на: комментарий от anonymous

Благодарю.

def notify_send_price(price):
    p = price / 1000
    if p != 100:
        os.system(f'notify-send -t 0 {price:.1f}')

...
notify_send_price(price)
...

Не работает. Точно так же ругается на двоеточие. IndentationError: unindent does not match any outer indentation level

Вот это (от Reineke) работает чётко, только без фильтра...

send = str(price/1000)
os.system ('notify-send  "{}" -t 0'.format(send))
asston ()
Ответ на: комментарий от asston

IndentationError

разберись с отступами, в питоне это имеет значение

и там, кста,

f'notify-send -t 0 {p:.1f}'
, а не price должно быть.

вот так ещё попробуй:

p = price / 1000
os.system('notify-send -t 0 {:.1f}'.format(p)) if p != 100 else None

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

anonymous ()
Ответ на: комментарий от WitcherGeralt

Когда дойдёт до того, чтоб сесть и учить пихтон нормально - сам узнает. А до тех пор нечего туда пихать рандомную херню. ¯\_(ツ)_/¯

Reineke ()
Ответ на: комментарий от anonymous
p = price / 1000
os.system('notify-send -t 0 {:.1f}'.format(p)) if p != 100 else None

Это Работает чётко !

Искренняя благодарность Всем помогавшим и принявшим участие.

Спасибо.

asston ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.