如何在 Python 中传递包含正则表达式的参数?

How to pass argument that contains regular expression in Python?

我正在使用 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 参数进行硬编码?

你说的不是正则表达式。

此外,问题不在于 python,而是您的 shell。

你必须用

调用你的脚本
python app.py username '#pa$$word'

sys.argv[2]将包含密码。

如果您的密码包含单引号 ('),则必须将其替换为三重单引号 '\'',其中第二个 ' 的前缀为\

正如其他人所说:

将密码作为命令行参数传递给脚本被认为是不好的做法,因为任何能够在同一台计算机上键入 ps 的人都会看到密码。

更常见的选项是,您

  • 传递包含密码的文件的名称,并且该文件对组和其他人没有读取权限
  • 传递包含密码的环境变量的名称或
  • 通过标准输入将密码输入脚本。
  • 提示输入密码。 (通常你尝试重新配置终端,这样密码就不会显示在终端上)