Para una python -csolución orientada, y siempre que use Bash shell, sí, puede tener una sintaxis simple de una línea como en este ejemplo:
Supongamos que desea hacer algo como esto (muy similar a su muestra, incluidas las except: passinstrucciones):
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Esto NO funcionará y producirá este error:
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 `
Esto se debe a la competencia entre Bash y Python Interpretación de \nsecuencias de escape. Para resolver el problema, se puede usar la $'string'sintaxis de Bash para forzar la \ninterpretación de Bash ANTES de la de Python. Para hacer el ejemplo más desafiante, agregué una end=..\n..especificación típica de Python en la llamada impresa de Python: al final podrá obtener AMBAS \ninterpretaciones de bash y Python trabajando juntos, cada uno en su texto de interés. Para que finalmente la solución adecuada sea así:
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
Eso conduce a la salida limpia adecuada sin error:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
Nota: esto debería funcionar también con execsoluciones orientadas, porque el problema sigue siendo el mismo (competencia de intérpretes de Bash y Python).
Nota 2: se podría solucionar el problema reemplazando algunos \npor algunos, ;pero no funcionará en cualquier momento (dependiendo de las construcciones de Python), mientras que mi solución siempre permite "una línea" a cualquier pieza del programa clásico de Python de varias líneas.
Nota 3: por supuesto, cuando se trata de un solo revestimiento, uno siempre tiene que ocuparse de los espacios de Python y la sangría, porque de hecho no estamos estrictamente "alineados" aquí, PERO haciendo una gestión mixta adecuada de la \nsecuencia de escape entre bash y Python . Así es como podemos lidiar con cualquier pieza del programa clásico de Python multilínea. La muestra de la solución también ilustra esto.