LINUX.ORG.RU

Вызов Python из bash


0

1

Вопрос, пожалуй, даст повод заподозрить во мне клинического идиота, но удержаться не мог. Не обладая навыками программирования и зная лишь совсем чуть-чуть bash и, horribile dictu, ERM, постепенно подхожу к идее, что хочу выучить Python. Для большинства вещей, тем не менее, мне хватает bash, поэтому интересует возможность не переписать кое-какие свои наработки с нуля на Python (на это мне пока не хватит знаний), но попробовать использовать некоторые более удобные вещи из Python в bash. Идея заключается в следующем: нужно передать из bash в Python некоторые переменные, провести над ними операции (например, срез строки) и вернуть их в bash для дальнейшего использования. Обратный вариант (передача из Python в bash переменных, обработка и возвращение в Python) вроде как возможен. А есть ли выход в моем случае? Большинство программ, которые я использую в скриптах, запускаются как раз из bash, и вопрос весьма актуален. К тому же, при моем уровне знания Python пока что лучше оставить основным языком bash. Заранее прошу прощения, если уровень идиотизма в сообщении показался кому-то превышающим все мыслимые нормы. :-)

stdin/stdout никто не отменял

Jetty ★★★★★
()

написать программу на пайтон работающую с аргументами или читающую стандартный никто не запрещает. возвращать данные на стандартный вывод тоже. собственно это и курите в python. («python ввод-вывод», «python работа с аргументами командной строки» в гугль)

jeuta ★★★★
()

Варианта, собственно, всего два: аргументы командной строки и переменные окружения.

Zenom ★★★
()
% python hw.py i lold
<<i>>
<<lold>>
% cat hw.py 
#!/usr/bin/python2

from __future__ import print_function
import sys
for i in range(1, len(sys.argv)):
    print('<<'+sys.argv[i]+'>>')

надеюсь пример понятен?

anonymous
()
python -c "import dbus
itfc = 'org.freedesktop.Notifications'
path = '/org/freedesktop/Notifications'
notify = dbus.Interface(dbus.SessionBus().get_object(itfc, path), itfc)
ret = notify.Notify('mpc', $REP, '$IMG', \"\"\"$TO_NTF\"\"\", '', '', '',10000)
print ret" > $REPFILE

из скрипта уведомления для mpd на хоткей

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

знаете как сделать это проще? notify-send не катит - из него нельзя заменять уведомления. dbus-send'ом вообще отправить нельзя.

как пример вызова питона из скрипта на баше покатит.

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

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

buddhist ★★★★★
()
#!/bin/bash

function MyFunction() {
/usr/bin/python <<EOF
что-то дeлаeм в питонe
EOF
}

-так напримeр

лучше оставить основным языком bash.

Bash - нe язык.

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

>> Омг. for i in sys.argv уже не катит?

а как ты собираешься исключить argv[0] в этом случае?

Так - for i in sys.argv[1:] ?

tailgunner ★★★★★
()

Еще можно исходные данные и результат работы передавать через файл

alix ★★★★
()

сравните

i=foo.dat 
echo ${i%.*}
python -c "print '$i'.rsplit('.',1)[0]"
AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.