Aby uzyskać python -czorientowane rozwiązanie i pod warunkiem, że używasz powłoki Bash, tak, możesz mieć prostą jednowierszową składnię, jak w tym przykładzie:
Załóżmy, że chcesz zrobić coś takiego (bardzo podobnego do twojej próbki, łącznie z except: passinstrukcją):
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
To NIE zadziała i spowoduje ten błąd:
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 `
Dzieje się tak, ponieważ konkurencja między Bash i Python Interpretation of \nescape sequences. Aby rozwiązać problem, można użyć $'string'składni Bash, aby wymusić \ninterpretację Bash PRZED Pythonem. Aby uczynić ten przykład bardziej wymagającym, dodałem typową end=..\n..specyfikację Pythona w wywołaniu Python print: na końcu będziesz w stanie uzyskać OBIE \ninterpretacje z bash i Python pracujących razem, każdą z odpowiednim fragmentem tekstu. Żeby ostatecznie właściwe rozwiązanie wyglądało tak:
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
Prowadzi to do prawidłowego, czystego wyniku bez błędów:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
Uwaga: powinno to działać również w przypadku execzorientowanych rozwiązań, ponieważ problem jest nadal ten sam (konkurs tłumaczy Bash i Python).
Uwaga 2: można by obejść ten problem, zastępując niektóre \ninnymi, ;ale to nie zadziała w żadnym momencie (w zależności od konstrukcji Pythona), podczas gdy moje rozwiązanie pozwala zawsze na "jednowierszowe" dowolne fragmenty klasycznego wielowierszowego programu w Pythonie.
Uwaga 3: oczywiście, gdy jest to jedna linijka, zawsze należy zadbać o spacje i wcięcia w Pythonie, ponieważ w rzeczywistości nie jesteśmy tutaj ściśle "jednowierszowi", ALE robimy właściwe mieszane zarządzanie \nsekwencją ucieczki między bashem i Pythonem . W ten sposób możemy sobie poradzić z każdym fragmentem klasycznego wielowierszowego programu w Pythonie. Przykład rozwiązania również to ilustruje.