2016-09-24 39 views
-1
#! /usr/bin/python3 
# pw.py - An insecure password locker program. 

PASSWORDS = {'email': 'aklsjdlksajdkljl', 
      'blog': 'dklasjkl9379343', 
      'luggage': '12345'} 

import sys, pyperclip 


if len(sys.argv) < 2: 
    print('Usage: python ' + sys.argv[0] + ' [' + sys.argv[1] + '] - copy account password') 
    sys.exit() 

account = sys.argv[1]  # first command line arg is the account name 


if account in PASSWORDS: 
    pyperclip.copy(PASSWORDS[account]) 
    print('Password for ' + account + " " + sys.argv[0] + " " + sys.argv[1] + ' copied to clipboard.') 
else: 
    print('There is no account named ' + account) 

當我輸入終端./pw.py email,它會直接進入線路並不滿足:if account in PASSWORDS:並將跳過行:if len(sys.argv) < 2:「LEN(sys.argv中)<2」,即使調用時只使用一個參數命令

爲什麼跳過那一行?

+1

請關注一個問題,在同一時間。我刪除了第二個查詢;請提出一個單獨的問題。 –

+0

我試圖給這個更詳細的標題 - 「有關X的問題」通常不夠詳細,不足以讓其他人知道他們是否有同樣的問題(因此如果答案可能有助於他們)閱讀標題,這是標題應該做的工作之一。 –

回答

1

如果sys.argv[1]被定義,則sys.argv的長度爲2或更大。當sys.argv僅包含0或1個項目時,測試sys.argv < 2僅爲真。因此if len(sys.argv) < 2:不會被跳過,測試只是錯誤並且關聯的塊不會被執行。

sys.argv[0]總是被設置爲腳本的名稱(這裏pw.py),這樣的長度將是您剛纔使用python pw.py(所以沒有考慮或其他參數),你會得到一個至少爲1

注索引錯誤,如下行試圖指數sys.argv[1],這是值未設置

print('Usage: python ' + sys.argv[0] + ' [' + sys.argv[1] + '] - copy account password') 
# This raises an index error when len(sys.argv) < 2 ^^^ 
+0

我刪除了sys.argv [1]但仍不打印該行。 – john

+0

@john:然後傳入*無參數*。 –

+0

好吧,我現在明白了。 len讓我感到困惑。謝謝 – john

相關問題