如何为可以使用shebang加载解释器的脚本编写Python解释器

时间:2013-02-03 17:09:29

标签: python argv shebang

我有一个用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]以后附加到该列表。

我想知道这是否正确,或者是否有其他方法可以更明确地确定这一点。我所做的工作适用于我需要使用的所有场景,但如果有的话,我会有兴趣了解更好的方法。

0 个答案:

没有答案