Für ein python -c orientierte Lösung und vorausgesetzt, Sie verwenden die Bash-Shell, können Sie eine einfache einzeilige Syntax wie in diesem Beispiel verwenden:
Angenommen, Sie möchten so etwas tun (sehr ähnlich zu Ihrer Probe, einschließlich except: passAnleitung):
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Dies wird NICHT funktionieren und diesen Fehler erzeugen:
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 `
Dies liegt an der Konkurrenz zwischen Bash und Python Interpretation von \nEscape-Sequenzen. Um das Problem zu lösen, kann man die $'string'Bash-Syntax verwenden, um die \nBash-Interpretation vor der Python- Syntax zu erzwingen . Um das Beispiel herausfordernder zu gestalten, habe ich end=..\n..dem Python-Druckaufruf eine typische Python- Spezifikation hinzugefügt : Am Ende können Sie BEIDE \nInterpretationen von bash und Python erhalten, die jeweils an ihrem betreffenden Textstück zusammenarbeiten. Damit endlich die richtige Lösung lautet:
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
Das führt zu der richtigen sauberen Ausgabe ohne Fehler:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
Hinweis: Dies sollte auch bei execorientierten Lösungen funktionieren , da das Problem immer noch dasselbe ist (Wettbewerb für Bash- und Python-Dolmetscher).
Hinweis 2: Man könnte das Problem umgehen, indem man einige \ndurch einige ersetzt, ;aber es wird nicht jederzeit funktionieren (abhängig von Python-Konstrukten), während meine Lösung es erlaubt, jedes Teil eines klassischen mehrzeiligen Python-Programms immer "einzeilig" zu machen.
Anmerkung 3: Wenn man einzeilig ist, muss man sich natürlich immer um Python-Leerzeichen und Einrückungen kümmern, da wir hier tatsächlich nicht ausschließlich "einzeilig" sind, ABER eine ordnungsgemäße gemischte Verwaltung der \nEscape-Sequenz zwischen Bash und Python durchführen . So können wir mit jedem klassischen mehrzeiligen Python-Programm umgehen. Die Lösungsprobe veranschaulicht dies ebenfalls.