对于python -c面向解决方案,并在您使用Bash shell的情况下,可以的,您可以使用一个简单的单行语法,例如以下示例:
假设您想执行以下操作(与示例非常相似,包括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 `
这是因为Bash和Python之间的竞争是\n转义序列的解释。要解决此问题,可以使用$'string'Bash语法\n在Python之前强制使用Bash解释。为了使示例更具挑战性,我end=..\n..在Python打印调用中添加了一个典型的Python 规范:最后,您将能够\n从bash和Python一起获得BOTH 解释,每个解释都涉及其关注的文本。这样最终正确的解决方案是这样的:
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的一些;,但它不会工作任何时候(取决于Python的结构),而我的解决方案允许始终以“一行”任何一件经典的多行Python程序。
注意3:当然,在使用单行代码时,必须始终注意Python的空格和缩进,因为实际上我们并不是严格意义上的“单行代码”,但是\n在bash和Python之间进行适当的转义序列混合管理。这就是我们可以处理任何经典的多行Python程序的方式。解决方案示例也对此进行了说明。