【发布时间】:2020-10-10 01:26:51
【问题描述】:
我正在使用 python 的 argparse 模块从命令行获取参数并登录网站,例如:python app.py username password。但是,我意识到一些更复杂的密码可能包含正则表达式,例如“#”或“$”,而 args.password 最终会被 MacOS 终端忽略或修改:python app.py username #pa$$word。
parser = argparse.ArgumentParser()
parser.add_argument("username", help="website account username", type=str)
parser.add_argument("password", help="website account password", type=str)
args = parser.parse_args()
如何避免这种行为而不必对这些 str 参数进行硬编码?
【问题讨论】:
-
无论如何,将密码放在参数列表中通常是个坏主意,因为其他进程(包括在其他用户名下运行)可以通过
ps命令或等效命令检查它们。 -
有什么更好更安全的选择?
-
通常的策略涉及以下任何一种:(1) 将它们放在一个文件中(适当保护)并传递文件名,(2) 将它们放在一个环境变量中(可以被其他运行的进程检查作为同一用户但不是其他用户),(3)交互式提示
-
无论如何,原始问题本质上是一个shell问题而不是python问题。 argparse 可以读取 python 进程的任何命令行参数,但是当从终端中运行的 shell 调用命令时,某些字符串可能需要引用或转义。但鉴于上述情况,这恐怕不是需要直接解决的问题。
-
知道了。嗯,谢谢你的帮助,我会听从你的建议的。