我有一个用Python编写的简单脚本解释器,它处理用文本文件编写的脚本。我可以在脚本顶部使用shebang引用解释器,以便我可以直接执行脚本。
解释器有一些逻辑来检测何时通过shebang调用它以便它可以 调整参数列表以进行补偿。这是必要的,因为当直接调用时,每个参数都是argv中的一个单独项,但是当通过shebang调用时,shebang行上的所有参数都包含在第一个参数字符串中,而脚本的名称在第二个参数字符串中随后直接向脚本提供任何参数。
我检查shebang的方式如下:
def main(name, argv):
...
if len(argv) >= 2 and name[0] == '/' and os.path.isfile(argv[1]) and os.access(argv[1], os.X_OK):
input = open(argv[1])
arglist = argv[0].split() + argv[2:]
else:
arglist = argv
input = sys.stdin
...
sys.exit(main(sys.argv[0], sys.argv[1:]))
这样做是假设执行是通过shebang,如果至少有2个argv值,命令名称以" /"开头。 (shebang可执行路径是绝对的),argv [1]中的脚本名称是可执行文件。如果通过shebang执行,那么参数列表是argv [0]拆分加上argv [2]以后附加到该列表。
我想知道这是否正确,或者是否有其他方法可以更明确地确定这一点。我所做的工作适用于我需要使用的所有场景,但如果有的话,我会有兴趣了解更好的方法。