встраивание коротких сценариев Python в сценарии удара

Я хотел бы встроить текст коротких сценариев Python в сценарии удара, для использования в говорят, мой .bash_profile. Что лучший способ состоит в том, чтобы пойти о выполнении такой вещи?

Решение, которое я имею до сих пор, состоит в том, чтобы назвать интерпретатор Python с -c опция, и говорит интерпретатор exec независимо от того, что это читает из stdin. Оттуда, я могу создать простые инструменты как следующее, позволив мне тексту процесса для использования в моей интерактивной подсказке:

function pyexec() {
    echo "$(/usr/bin/python -c 'import sys; exec sys.stdin.read()')"
}

function traildirs() {
    pyexec <<END
trail=int('${1:-3}')
import os
home = os.path.abspath(os.environ['HOME'])
cwd = os.environ['PWD']
if cwd.startswith(home):
    cwd = cwd.replace(home, '~', 1)
parts = cwd.split('/')
joined = os.path.join(*parts[-trail:])
if len(parts) <= trail and not joined.startswith('~'):
    joined = '/'+joined
print joined
END
}

export PS1="\h [\$(traildirs 2)] % "

Этот подход пахнет немного забавным мне, хотя, и я задаюсь вопросом, каков альтернативы выполнению его этот путь мог бы быть.

Мои навыки сценариев удара являются довольно элементарными, таким образом, мне особенно интересно слышать, делаю ли я что-то глупое с точки зрения интерпретатора удара.

51
задан Matt Anderson 2 February 2010 в 15:36
поделиться

3 ответа

Обработать событие щелчка на карте Щелкните обработчик . Вот один из многих образцов кодов, которые можно найти в архивах списков рассылки OpenLayers:

map.events.register('click', map, handleMapClick);

function handleMapClick(e)
{
   var lonlat = map.getLonLatFromViewPortPx(e.xy);
   // use lonlat

   // If you are using OpenStreetMap (etc) tiles and want to convert back 
   // to gps coords add the following line :-
   // lonlat.transform( map.projection,map.displayProjection);

   // Longitude = lonlat.lon
   // Latitude  = lonlat.lat
} 
-121--2889102-

Почему необходимо использовать -c ? Это работает для меня:

python << END
... code ...
END

не нуждаясь ни в чем лишнем.

-121--1062047-

Интерпретатор python принимает - в командной строке в качестве синонима stdin , чтобы можно было заменить вызовы pyexec на:

python - <<END

См. ссылку на командную строку здесь .

33
ответ дан 7 November 2019 в 09:59
поделиться

Interesting... Я тоже хочу получить ответ сейчас ;-)

Он не спрашивает, как выполнить код на питоне в рамках бэш-скрипта, но на самом деле у него есть переменные окружения, заданные питоном.

Поместите это в бэш-скрипт и попробуйте заставить его сказать "это сработало".

export ASDF="it didn't work"

python <<END
import os
os.environ['ASDF'] = 'it worked'
END

echo $ASDF

Проблема в том, что питон выполняется в копии окружения. Любые изменения этого окружения не видны после выхода питона.

Если для этого есть решение, я бы тоже с удовольствием посмотрел.

2
ответ дан 7 November 2019 в 09:59
поделиться

Зачем вам нужно использовать -c? Для меня это работает:

python << END
... code ...
END

--, не требуя ничего лишнего.

43
ответ дан 7 November 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: