以下のためにpython -c指向ソリューション、そしてあなたがbashのシェルを使用して、はい、あなたは、この例のような単純な1ライン構文を持つことができます。
次のようなことをしたいとします(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、Pythonの前にBashの解釈を強制できます。この例をさらに困難にするためend=..\n..に、Pythonの印刷呼び出しに典型的なPython 仕様を追加しました。最後に\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:1には、いくつかを置き換えることで問題を回避することができ\n、いくつかのことで;、私の解決策は、常に「1行」に古典的なマルチラインのPythonプログラムのどの部分を可能にしながら、それは(Pythonの構文に応じて)仕事いつでもしません。
注3:もちろん、1行で記述する場合は、Pythonのスペースとインデントに常に注意する必要があります。実際には、ここでは厳密に「1行」ではないため、\nbashとPythonの間でエスケープシーケンスの適切な混合管理を行っています。。これは、古典的な複数行のPythonプログラムを処理する方法です。ソリューションサンプルもこれを示しています。