Python 2.7 argparse:如何获取 file_name 和使用单个标志的文件

Python 2.7 argparse: How to take file_name and a file using single flag

我需要使用来自用户的一个标志来获取 file_namessh_key_file。任何帮助表示赞赏。 用户输入应如下所示:
python xx.py --file ssh_key_file.pub file_name


由于某些原因我必须使用互斥组

示例代码可能如下所示:

ap = argparse.ArgumentParser()`
xap = ap.add_mutually_exclusive_group()`
xap.add_argument('--file', 
                 dest='exp_kp',
                 nargs=2,
                 type=argparse.FileType('rb'),
                 help='Key file and key name')`

上面--file中的file_name是否也可以取?

提前致谢。

ap = argparse.ArgumentParser() 

你还有其他论点要放在这个组中吗?只有一个没有用(即使它有 nargs=2)

xap = ap.add_mutually_exclusive_group() 

正如所写,这会将两个参数都视为文件名并尝试打开它们。 type 适用于两个参数,而不仅仅是一个。

xap.add_argument('--file', 
                  dest='exp_kp',
                  nargs=2,
                  type=argparse.FileType('rb'),
                  help='Key file and key name')

FileType只是方便type。它尝试打开文件,如果有问题(并退出)则引发 argparse 错误。缺点是关闭打开的文件现在是您的责任。您不能在首选 with 上下文中使用它。它唯一真正的优势是 argparse 错误。

xap.add_argument('--file', 
                  dest='exp_kp',
                  nargs=2,
                  metavar=('FILE','KEY'),
                  help='Key file and key name')

此表单将接受两个字符串,然后您可以根据需要进行处理,例如

 with open(args.exp_kp[0],'rb') as f:
      lines = f.readlines()
      for l in lines: 
          if args.exp_kp[1] in l:
              print(l)

如果打开此文件时出现问题,您仍然可以使用 `parser.error('put your message here') 调用引发 argparse 错误。