У меня возникли проблемы с пониманием правильного выполнения функций на основе аргументов с использованием argparse и Python 2.7. Сам скрипт предназначен для Caesar's cipher.Как правильно вызвать функцию с помощью argparse?
import argparse
def encipher(s):
pass
def decipher(s):
pass
def main():
parser = argparse.ArgumentParser(description="(de)cipher a string using Caesar's cipher")
group = parser.add_mutually_exclusive_group(required=True)
parser.add_argument('-s', default=1, help='shift length')
group.add_argument('-c', dest='action', action='store_const', const=encipher, help='encipher a string')
group.add_argument('-d', dest='action', action='store_const', const=decipher, help='decipher a string')
parser.add_argument('s', metavar='string', help='string to (de)cipher')
# call function (action) with string here
if __name__ == '__main__':
main()
Где подразумевается использование быть:
$ ./cipher.py -c "he had a strange car"
if ibe b tusbohf dbs
Как правильно отправить данную строку соответствующую функцию, т.е. encipher(s)
с -c
и decipher(s)
с -d
, или, возможно, с -s
с другим сдвиг?
Я видел несколько примеров, указывающих на то, что вы можете проверить содержимое анализатора вручную, но разве это не победит какую-то цель?
Это выглядело ужасно неправильно с первого взгляда, но затем я увидел, что OP фактически настроил свой парсер аргументов, чтобы работать таким образом. – user2357112
Спасибо, это, казалось, сделало это! @ user2357112 вы бы посоветовали мне настроить его каким-либо другим способом? Я считаю, что он работает по назначению. – timss
@timss: Возможно, было бы неплохо настроить ваш синтаксический анализатор так, чтобы он требовал указать только один из '-c' или' -d', но кроме этого и '-s' /' s «конфликт, это выглядит хорошо. – user2357112