在python中嵌入Bash脚本而不使用子进程调用

时间:2013-03-03 19:48:17

标签: python bash

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

#!/bin/bash -

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

有人可以对这种方法有所了解。这种方法叫做什么,也许还有相关的好处。我显然可以看到简洁,但我认为除此之外还有更多。

2 个答案:

答案 0 :(得分:3)

这是使文件成为有效的Python脚本和有效的bash脚本的一种有点聪明的方法。请注意,它不会导致神奇地生成子进程。相反,如果文件由bash评估,则将运行bash脚本,如果由Python评估,则将忽略bash脚本。

它很聪明,但可能不是一般的软件工程实践。拥有单独的脚本通常更有意义。

给出一个更具体的例子(比如说这个文件名为" polyglot"):

''''echo hello from bash
exit
'''

print('hello from python')

如您所知,bash将忽略初始引号,并从bash"打印" hello,然后在到达三重引号之前退出。 Python会将bash脚本视为字符串,并忽略它,运行下面的Python脚本。

$ python polyglot
hello from python
$ bash polyglot
hello from bash

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

答案 1 :(得分:2)

  1. 不,那不是嵌入到python中,shebang说这是一个bash脚本
  2. ''''''两次,这只是一个空字符串,它没有任何效果。
  3. '''无效,因为最后'未关闭。