2012-01-27 91 views
1

我分析來自谷歌的回購腳本(指示在http://source.android.com/source/downloading.html幫助理解Python腳本

回購腳本是用Python編寫的需要。書中有一個部分,上面寫着:

if sys.argv[-1] =='#%s' % magic 

有人可以解釋的語義是什麼意思線?我對我的Python有點生疏。用於該代碼的整個塊是:

magic='--calling-python-from-/bin/sh--' 
"""exec" python -E "$0" "[email protected]" """#$magic" 
if __name__ == '__main__': 
    import sys 
    if sys.argv[-1] =='#%s' % magic: 
     del sys.argv[-1] 

回答

3

海賊王:

  • sys.argv持有傳遞給一個Python腳本命令行參數的清單。含義sys-argv[-1]是最後一個參數。
  • '#%s' % magic%格式化你的字符串,這意味着你看到的地方%s將會有magic的值(如果magic不是將被轉換的字符串:str(magic))。在你的代碼中,字符串將會是:'#--calling-python-from-/bin/sh--'
  • del sys.argv[-1]。這是自我解釋性的:意味着列表sys.argv的最後一個值將被刪除。

總之這意味着:如果最後的命令行參數是#--calling-python-from-/bin/sh--這樣的說法將被從sys.argv刪除。

1

它格式化魔術作爲格式「#nnn」的字符串,其中n爲magic轉換爲字符串,並使用命令行上傳遞的最後一個參數字符串進行比較(負面指數從最後列出了該列表)。如果找到,arg將從參數列表中刪除。當時

+0

你是什麼意思「幻數」?我在這個腳本中沒有看到與數學有關的任何東西...... – 2012-01-30 19:54:06

+1

@Igor G,'$ magic'和'magic'的值。我可能應該將代碼格式化爲更清晰。它不一定是一個數字,我認爲「數字」只是因爲「魔術數字」和#符號的常見用法而誤入其中。 – FatalError 2012-01-30 20:37:54