我已经能够使用subprocess将 bash 脚本嵌入到 python 中。我今天碰巧浏览了一段 python 代码,偶然发现了下面这行代码,它也将 bash 脚本嵌入到 python 中——使用类似于docstring
.
#!/bin/bash -
''''echo -n
if [[ $0 == "file" ]]; then
..
fi
'''
有人可以阐明这种方法。这种方法叫什么,也许还有相关的好处。我显然可以看到简单性,但我认为除此之外还有更多。
我已经能够使用subprocess将 bash 脚本嵌入到 python 中。我今天碰巧浏览了一段 python 代码,偶然发现了下面这行代码,它也将 bash 脚本嵌入到 python 中——使用类似于docstring
.
#!/bin/bash -
''''echo -n
if [[ $0 == "file" ]]; then
..
fi
'''
有人可以阐明这种方法。这种方法叫什么,也许还有相关的好处。我显然可以看到简单性,但我认为除此之外还有更多。
这是一种使文件既是有效的 Python 脚本又是有效的 bash 脚本的巧妙方法。请注意,它不会导致子进程神奇地产生。相反,如果文件由 bash 评估,则 bash 脚本将运行,如果它由 Python 评估,则 bash 脚本将被忽略。
它很聪明,但总的来说可能不是一个好的软件工程实践。拥有单独的脚本通常更有意义。
举一个更具体的例子(比如这个文件叫做“ polyglot ”):
''''echo hello from bash
exit
'''
print('hello from python')
正如您所注意到的,bash 将忽略初始引号,并打印“hello from bash”,然后在到达三引号之前退出。Python 会将 bash 脚本视为字符串,并忽略它,运行下面的 Python 脚本。
$ python polyglot
hello from python
$ bash polyglot
hello from bash
但很自然,这通常(更清楚地)可以重构为两个脚本,每种语言一个。
''''
只是''
一个空字符串,它没有任何作用。'''
无效的,因为最后一个'
没有关闭。