0

我已经能够使用subprocess将 bash 脚本嵌入到 python 中。我今天碰巧浏览了一段 python 代码,偶然发现了下面这行代码,它也将 bash 脚本嵌入到 python 中——使用类似于docstring.

#!/bin/bash -

''''echo -n
if [[ $0 == "file" ]]; then
  ..
fi
'''

有人可以阐明这种方法。这种方法叫什么,也许还有相关的好处。我显然可以看到简单性,但我认为除此之外还有更多。

4

2 回答 2

3

这是一种使文件既是有效的 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

但很自然,这通常(更清楚地)可以重构为两个脚本,每种语言一个。

于 2013-03-03T20:01:42.973 回答
2
  1. 不,这不是嵌入到 python 中的,shebang 说它是一个 bash 脚本
  2. 是两次,这''''只是''一个空字符串,它没有任何作用。
  3. '''无效的,因为最后一个'没有关闭。
于 2013-03-03T19:52:38.340 回答