Per un python -c soluzione orientata e purché tu utilizzi la shell Bash, sì, puoi avere una sintassi di una riga semplice come in questo esempio:
Supponiamo che tu voglia fare qualcosa del genere (molto simile al tuo campione, comprese le except: passistruzioni):
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Questo NON funzionerà e produrrà questo errore:
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 `
Questo perché la competizione tra Bash e Python Interpretazione delle \nsequenze di escape. Per risolvere il problema, è possibile utilizzare la $'string'sintassi di Bash per forzare l' \ninterpretazione di Bash PRIMA di quella di Python. Per rendere l'esempio più impegnativo, ho aggiunto una end=..\n..specifica Python specifica nella chiamata di stampa di Python: alla fine sarete in grado di ottenere ENTRAMBE le \ninterpretazioni da bash e Python che lavorano insieme, ognuna sul suo pezzo di testo di interesse. In modo che finalmente la soluzione corretta sia così:
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
Ciò porta all'output pulito corretto senza errori:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
Nota: questo dovrebbe funzionare anche con exec soluzioni orientate, perché il problema è sempre lo stesso (concorrenza tra interpreti di Bash e Python).
Nota2: si potrebbe aggirare il problema sostituendone alcuni \ncon alcuni ;ma non funzionerà in qualsiasi momento (a seconda dei costrutti Python), mentre la mia soluzione consente di "sempre una riga" qualsiasi pezzo del classico programma Python multilinea.
Nota 3: ovviamente, quando si è in linea, si deve sempre prendersi cura degli spazi e del rientro di Python, perché in realtà qui non si fa rigorosamente "una linea", MA facendo una corretta gestione mista della \nsequenza di escape tra bash e Python . Ecco come possiamo gestire qualsiasi pezzo del classico programma Python multilinea. L'esempio di soluzione illustra anche questo.