2015-06-08 4 views
7

Я пытаюсь запустить какую-нибудь питона кода в Баш скрипт, так что я хотел понять, что лучше между:питон -c против питона - << Heredoc

#!/bin/bash 
#your bash code 

python -c " 
#your py code 
" 

VS

python - <<DOC 
#your py code 
DOC 

Я проверил сеть, но не смог собрать фрагменты вокруг темы. Считаете ли вы, что лучше лучше другого? Если вы хотите вернуть значение из блока кода python в ваш сценарий bash, то heredoc это только путь?

Благодаря

+2

В первом примере вам нужно избежать двойных кавычек, если вы хотите использовать строки с двойными двойными кавычками. – Evert

+0

Ok Evert, это один аспект. Что другие предпочитают друг друга? – Kashif

+0

Это действительно вопрос о документах, а не о Python – shadowtalker

ответ

6

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

С другой стороны, использование python -c '...' связывает одну кавычку для нужд оболочки, поэтому вы можете использовать только строки с двойными кавычками в вашем скрипте Python; используя двойные кавычки, чтобы защитить скрипт от оболочки, вводит дополнительные проблемы (строки в двойных кавычках подвергаются различным заменам, тогда как строки с одиночными кавычками являются буквальными в оболочке).

В качестве примечания обратите внимание на то, что вы, вероятно, захотите одинаковать кавычки с разделителем here-doc, в противном случае сценарий Python будет подчинен подобным подстановкам.

python - <<'____HERE' 
print("""Look, we can have double quotes!""") 
print('And single quotes! And `back ticks`!') 
print("$(and what looks to the shell like process substitutions and $variables!)") 
____HERE 
+0

Я не понимаю ваш комментарий о возврате значения в оболочку. Обе конструкции печатают на стандартный вывод и возвращают код выхода, оба из которых могут быть проверены оболочкой, если хотите. – tripleee

+0

Согласовано. Вам нужно прочитать shell для вывода, который python напечатал на стандартном выходе. например #/бен/Баш функция current_datetime { питона - << '__ COB' импорта дата и время печать datetime.datetime.now() __COB }! ЦМРА = $ (current_datetime) эха Текущего времени и время: $ dtm – Kashif

3

Если вы предпочитаете использовать python -c '...' без необходимости бежать с двойными кавычками вы можете сначала загрузить код в переменном Баше, используя здесь-документы:

read -r -d '' CMD << '--END' 
print ("'quoted'") 
--END 
python -c "$CMD" 

код питона загружен дословным в переменную CMD, и нет необходимости избегать двойных кавычек.

Смежные вопросы