Для python -cориентированного решения и при условии, что вы используете оболочку Bash, да, у вас может быть простой однострочный синтаксис, как в этом примере:
Предположим, вы хотите сделать что-то подобное (очень похожее на ваш образец, включая except: passинструкцию):
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Это НЕ будет работать и приведет к этой ошибке:
File "<string>", line 1
from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n
^
SyntaxError: unexpected character after line continuation character `
Это связано с конкуренцией между интерпретацией \nуправляющих последовательностей Bash и Python . Чтобы решить эту проблему, можно использовать $'string'синтаксис Bash для принудительной \nинтерпретации Bash ПЕРЕД интерпретацией Python. Чтобы сделать пример более сложным, я добавил типичную end=..\n..спецификацию Python в вызов Python print: в конце вы сможете получить ОБЕ \nинтерпретации от bash и Python, работающих вместе, каждая над своим фрагментом текста, вызывающим озабоченность. Итак, наконец, правильное решение выглядит так:
python -c $'from __future__ import print_function\ntry:\n import numpy;\n print( numpy.get_include(), end="\\n" )\n print( "Hello" )\nexcept:pass\n' OUTPUT_VARIABLE __numpy_path
Это приводит к правильному чистому выводу без ошибок:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
Примечание: это должно работать и с execориентированными решениями, потому что проблема все та же (соревнование интерпретаторов Bash и Python).
Примечание 2: можно было бы обойти проблему, заменив некоторые \nиз них некоторыми, ;но это не будет работать в любое время (в зависимости от конструкций Python), в то время как мое решение позволяет всегда "однострочно" использовать любую часть классической многострочной программы Python.
Примечание 3: конечно, при использовании одной строки нужно всегда заботиться о пробелах и отступах Python, потому что на самом деле мы здесь не строго «однострочны», НО делаем правильное смешанное управление \nescape-последовательностью между bash и Python . Вот как мы можем работать с любой частью классической многострочной программы Python. Пример решения также иллюстрирует это.