2016-09-24 14 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

相关问题