Pour une python -csolution orientée, et à condition d'utiliser le shell Bash, oui, vous pouvez avoir une syntaxe simple en une ligne comme dans cet exemple:
Supposons que vous souhaitiez faire quelque chose comme ceci (très similaire à votre exemple, y compris les except: passinstructions):
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Cela ne fonctionnera PAS et produira cette erreur:
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 `
C'est parce que la concurrence entre Bash et Python Interprétation de \n séquences d'échappement. Pour résoudre le problème, on peut utiliser la $'string'syntaxe Bash pour forcer l' \ninterprétation de Bash AVANT celle de Python. Pour rendre l'exemple plus difficile, j'ai ajouté une end=..\n..spécification Python typique dans l'appel d'impression Python: à la fin, vous pourrez obtenir les DEUX \ninterprétations de bash et de Python travaillant ensemble, chacune sur son texte de préoccupation. Pour que finalement la bonne solution soit comme ceci:
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
Cela conduit à la sortie propre correcte sans erreur:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
Remarque: cela devrait également fonctionner avec execdes solutions orientées, car le problème est toujours le même (concours d'interprètes Bash et Python).
Note 2: on pourrait contourner le problème en remplaçant certains \npar certains ;mais cela ne fonctionnera à aucun moment (selon les constructions Python), alors que ma solution permet de toujours "une ligne" n'importe quel morceau de programme Python multi-lignes classique.
Note 3: bien sûr, en une seule ligne, il faut toujours s'occuper des espaces et de l'indentation Python, car en fait nous ne sommes pas strictement "une ligne" ici, MAIS faire une bonne gestion mixte de \nla séquence d'échappement entre bash et Python . C'est ainsi que nous pouvons gérer n'importe quel morceau de programme Python multi-lignes classique. L'exemple de solution illustre également cela.