我在理解如何使用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)
-c
和decipher(s)
-d
,或者-s
不同的转变?
我已经看到一些示例表明您可以手动测试解析器的内容,但这不会失败一些目的吗?
答案 0 :(得分:4)
该功能将在action
中,s
中的字符串:
args = parser.parse_args()
args.action(args.s)
请注意,-s
参数的声明与编号参数s
冲突。你只会看到后者。您应该更改其中一个名称 - 例如,将编号的名称更改为string
,这样短-s
可以保持不变。