如何使用argparse正确调用函数?

时间:2014-01-16 11:15:44

标签: python python-2.7 argparse

我在理解如何使用argparse和Python 2.7基于参数正确执行函数时遇到一些问题。脚本本身适用于Caesar's cipher

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) -cdecipher(s) -d,或者-s不同的转变?

我已经看到一些示例表明您可以手动测试解析器的内容,但这不会失败一些目的吗?

1 个答案:

答案 0 :(得分:4)

该功能将在action中,s中的字符串:

args = parser.parse_args()
args.action(args.s)

请注意,-s参数的声明与编号参数s冲突。你只会看到后者。您应该更改其中一个名称 - 例如,将编号的名称更改为string,这样短-s可以保持不变。