Python 脚本中有没有办法确定调用者是否在命令行上提供了解释器,或者是否使用 shebang 行来确定要使用的解释器?
举个简单的例子,myscript.py(具有可执行权限):
#!/bin/env python
import sys
print sys.argv
我想知道这个脚本是否被称为:
$ python myscript.py
或者
$ ./myscript.py
无论哪种情况,sys.argv[0] 都只是“myscript.py”。
答案1
这可以通过使用通过 shebang 行(间接)设置的环境变量来实现。
理论上,可以在 shell 中设置相同的变量,但除非有人试图明确欺骗检测机制,否则这应该没问题。
不幸的是,shebang 行仅限于两个参数,这还不够(至少我不知道这样的解决方案)。因此您需要一个帮助脚本。幸运的是,Linux 内核不要求 shebang 解释器是二进制文件:
/usr/local/bin/shebang-bash.sh
#! /bin/bash
via_shebang=1 bash "$1"
然后你使用该脚本作为 shebang 解释器:
#! /usr/local/bin/shebang-bash.sh
在脚本中,您只需检查 的值/存在$via_shebang
。