Para uma python -c
solução orientada, e desde que você use o shell Bash, sim, você pode ter uma sintaxe simples de uma linha, como neste exemplo:
Suponha que você gostaria de fazer algo assim (muito semelhante à sua amostra, incluindo except: pass
instruções):
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Isso NÃO funcionará e produzirá este erro:
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 `
Isso ocorre porque a competição entre Bash e Python Interpretação de \n
seqüências de escape. Para resolver o problema, pode-se usar a $'string'
sintaxe do Bash para forçar a \n
interpretação do Bash ANTES da interpretação do Python. Para tornar o exemplo mais desafiador, adicionei uma end=..\n..
especificação típica do Python na chamada de impressão do Python: no final, você poderá obter as duas \n
interpretações do bash e do Python trabalhando juntos, cada um no seu texto de preocupação. Então, finalmente, a solução adequada é assim:
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
Isso leva à saída limpa adequada sem erros:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
Nota: isso deve funcionar bem com exec
soluções orientadas, porque o problema ainda é o mesmo (competição de intérpretes Bash e Python).
Nota 2: é possível solucionar o problema substituindo alguns \n
por alguns, ;
mas ele não funcionará a qualquer momento (dependendo das construções do Python), enquanto minha solução permite sempre "uma linha" em qualquer parte do programa clássico de várias linhas do Python.
Nota 3: é claro que, quando for alinhado, sempre é necessário cuidar dos espaços e do recuo do Python, porque na verdade não estamos estritamente "alinhados" aqui, MAS realizando um gerenciamento misto adequado da \n
sequência de escape entre o bash e o Python . É assim que podemos lidar com qualquer parte do clássico programa Python multilinhas. A amostra da solução ilustra isso também.