python - 在不使用子进程调用的情况下将 Bash 脚本嵌入 python

标签 python bash

我已经能够使用 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

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

关于python - 在不使用子进程调用的情况下将 Bash 脚本嵌入 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190055/

相关文章:

python - Flask-SQLAlchemy 使用 SQLite 数据库,即使它是为 PostgreSQL 配置的

python - 从异常中获取好的字符串的正确方法

python - 如何在没有数据库的情况下使用 JWTTokenUserAuthentication 进行身份验证

linux - 如果为真,则在新 screen 中运行脚本

python - 如何使用 Python 创建 JKS 或 P12 keystore

python - 从循环中重新抛出当前项目的异常

python - 小键盘在 pygame 中不起作用

bash - Git Hook : '.git/hooks/pre-commit' : Operation not permitted

python - 运行 Python 脚本后在给定目录中的 cd 终端?

linux - 用于检查 PDF 是否被 ocr 的 BASH 脚本