我正在分析Google的repo脚本(http://source.android.com/source/downloading.html上的说明)
repo脚本是用Python编写的。那里有一部分说:
if sys.argv[-1] =='#%s' % magic
有人可以在语义上解释这条线的含义吗?我的Python有点生疏了。整个代码块是:
magic='--calling-python-from-/bin/sh--'
"""exec" python -E "$0" "$@" """#$magic"
if __name__ == '__main__':
import sys
if sys.argv[-1] =='#%s' % magic:
del sys.argv[-1]
答案 0 :(得分:3)
当时的一件作品:
sys.argv
保存传递给Python脚本的命令行参数列表。表示sys-argv[-1]
是最后一个参数。'#%s' % magic
。 %
格式化您的字符串,这意味着您看到%s
的位置将是magic
的值(如果magic
不是将被转换的字符串:{ {1}})。在您的代码中,字符串将是:str(magic)
。'#--calling-python-from-/bin/sh--'
。这是自我解释的:意味着将删除列表del sys.argv[-1]
的最后一个值。所有这一切意味着:如果最后一个命令行参数是sys.argv
,那么该参数将从#--calling-python-from-/bin/sh--
中删除。
答案 1 :(得分:1)
它将magic格式化为格式为'#nnn'的字符串,其中n为magic
转换为字符串,并将该字符串与命令行上传递的最后一个参数进行比较(负索引从列表中索引列表) )。如果找到,则从参数列表中删除arg。