Как передать аргумент, содержащий регулярное выражение в Python? - PullRequest
0 голосов
/ 19 июня 2020

Я использую модуль 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?

1 Ответ

1 голос
/ 19 июня 2020

На самом деле вы не говорите о регулярных выражениях.

Далее проблема не в python, а в вашей оболочке.

вам пришлось вызвать свой скрипт с помощью

python app.py username '#pa$$word'

и sys.argv[2] будут содержать пароль.

Если у вас есть пароль, содержащий одинарную кавычку ('), вам нужно было заменить его тройной одинарной кавычкой '\'', где вторая ' имеет префикс \

Как уже говорили другие:

Считается плохой практикой передавать пароли в качестве аргументов командной строки в сценарий, поскольку любой может ввести ps на том же компьютере увидит пароль.

Более распространенные варианты: вы

  • передаете имя файла, содержащего пароль, и что этот файл не имеет разрешения на чтение для group и другие
  • передают имя переменной среды, содержащей пароль, или
  • перенаправляют пароль в ваш скрипт через stdin.
  • запрашивает пароль. (обычно вы пытаетесь перенастроить терминал так, чтобы пароль не отображался на терминале)
...