Одна проблема с использованием bash here document
заключается в том, что сценарий затем передается в Python на stdin
, поэтому, если вы хотите использовать сценарий Python в качестве фильтра, он становится громоздким.Одна альтернатива - использовать bash
process substitution
, что-то вроде этого:
... | python <( echo '
code here
' ) | ...
Если сценарий слишком длинный, вы также можете использовать here document
внутри парена, например так:
... | python <(
cat << "END"
code here
END
) | ...
Внутри скрипта вы можете читать / писать, как обычно, с / на стандартный ввод / вывод (например, sys.stdin.readlines
, чтобы сожрать весь ввод).
Также,python -c
можно использовать, как уже упоминалось в других ответах, но вот как мне нравится делать это, чтобы красиво отформатировать, сохраняя при этом правила отступов Python ( credits ):
read -r -d '' script <<-"EOF"
code goes here prefixed by hard tab
EOF
python -c "$script"
Просто убедитесь, что первый символ каждой строки внутри документа является жесткой вкладкой.Если вам нужно поместить это внутри функции, то я использую нижеприведенный трюк, который я где-то видел, чтобы он выглядел выровненным:
function somefunc() {
read -r -d '' script <<-"----EOF"
code goes here prefixed by hard tab
----EOF
python -c "$script"
}