A의 python -c
중심의 솔루션, 당신은 배쉬 쉘을 사용 다만, 예이 예에서 같은 간단한 한 줄의 구문을 가질 수 있습니다 :
다음과 같이 ( except: pass
명령을 포함하여 샘플과 매우 유사한) 것을 원한다고 가정하십시오 .
python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
작동하지 않으며이 오류가 발생합니다.
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 `
\n
이스케이프 시퀀스 의 Bash와 Python 해석 간의 경쟁 때문 입니다. 문제를 해결하기 위해 $'string'
Bash 구문을 사용 \n
하여 Python보다 Bash 해석 을 강제 실행할 수 있습니다 . 예제를 더 어렵게 만들기 위해 end=..\n..
파이썬 인쇄 호출에 일반적인 파이썬 사양을 추가 했습니다. 결국 \n
bash와 Python에서 각각 관심있는 텍스트에 대해 함께 해석 할 수 있습니다 . 결국 적절한 해결책은 다음과 같습니다.
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
그러면 오류없이 올바른 클린 출력이 생성됩니다.
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello
참고 : 이것은 exec
문제가 여전히 동일하기 때문에 지향적 인 솔루션 에서도 잘 작동 합니다 (Bash 및 Python 인터프리터 경쟁).
참고 2 : 일부 \n
를 일부 대체하여 문제를 해결할 수는 ;
있지만 언제든지 작동하지 않습니다 (파이썬 구문에 따라 다름). 내 솔루션을 사용하면 고전적인 멀티 라인 파이썬 프로그램을 항상 "한 줄"할 수 있습니다.
참고 3 : 물론, 한 줄로 할 때 항상 파이썬 공간과 들여 쓰기를 처리해야합니다. 실제로 우리는 여기서 엄격하게 "한 줄짜리"는 아니지만 \n
Bash와 Python 사이 의 이스케이프 시퀀스를 적절히 혼합 관리합니다. . 이것이 우리가 고전적인 멀티 라인 파이썬 프로그램을 다룰 수있는 방법입니다. 솔루션 샘플에서도이를 보여줍니다.