【发布时间】:2014-03-19 17:37:39
【问题描述】:
如果我使用以下选项调用以下脚本:
--user u1 --password p1 --foo f1 --user u2 --user u3 --password p3
然后它会打印:
Namespace(foo=['bar', 'f1'], password=['p1', 'p3'], user=['u1', 'u2', 'u3'])
问题:我有什么方法可以设置用户和密码之间的依赖关系,所以它会抛出错误,因为没有指定用户 u2 的密码?
不太相关的问题:如何为所有用户指定默认的 foo 值?使用给定的输入,我希望 foo 等于 ['f1','bar','bar']。
我的主要问题的解决方案是检查列表用户和密码是否具有相同的长度,但这并不是我想要的。
这是脚本:
import argparse
parser = argparse.ArgumentParser()
group = parser.add_argument_group('authentication')
group.add_argument('--user', action='append', required=True)
group.add_argument('--password', action='append', required=True)
group.add_argument('--foo', action='append', default=['bar'])
print(parser.parse_args())
【问题讨论】:
-
在命令行输入密码可能存在安全隐患。例如,它们可能会被运行
ps的人窃取。 -
谢谢@unutbu。 “真正的”参数实际上不是用户名和密码。我对安全一无所知。
-
@unutbu,你能解释一下安全风险是什么以及ps是如何被恶意使用的吗?和汤米一样,我对安全一无所知。
-
@RyanDay:
ps axuwww显示所有当前进程的完整命令(包括任何参数)。如果用户要键入密码作为脚本的参数,那么同一台计算机上的任何其他用户都可以通过在脚本运行时运行ps axuwww来查看这些密码。
标签: python python-3.x argparse