#!/usr/bin/python2.7
import sys
import argparse
.....
parser = argparse.ArgumentParser(usage=usage_msg)
print sys.argv[1:]
parser.add_argument("-1", action="store_true", dest="col1", default=False,
help="Suppress column 1 (lines unique to FILE1)")
parser.add_argument("-2", action="store_true", dest="col2", default=False,
help="Suppress column 2 (lines unique to FILE2)")
parser.add_argument("-3", action="store_true", dest="col3", default=False,
help="Suppress column 3")
parser.add_argument("-u", action="store_true", dest="unsorted", default=False,
help="Compare unsorted files")
options,args = parser.parse_args(sys.argv[1:])
然后我运行命令:
./comm.py trace.tr testR
我认为上述方法应该可行,但我最终得到了这个错误:
comm.py: error: unrecognized arguments: trace.tr testR
并且想知道为什么,因为我认为我正确地设置了一切。
我需要解析程序运行的两个文件。
任何人都可以诊断出我做错的事吗?
答案 0 :(得分:2)
如果您希望argparse
需要两个要解析的文件的位置参数,告诉它们。添加如下内容:
parser.add_argument("tracefile", type=argparse.FileType("r"),
help="Trace file to parse")
parser.add_argument("testfile", type=argparse.FileType("r"),
help="Test file to parse")
args = parser.parse_args()
所以它不仅知道期望位置参数,而且确保它们是可读文件并为您打开它们。然后,您可以在parse_args
调用args.tracefile
和args.testfile
之后访问它们(或者在您的方案中使用任何真实名称)。
答案 1 :(得分:1)
您想要的是parse_known_args
,而不是parse_args
:
options, args = parser.parse_known_args(sys.argv[1:])
通话结束后,options
将为Namespace(col1=False, col2=False, col3=False, unsorted=False)
而args
将为['trace.tr', 'testR']