parser.parse_args(sys.argv [1:])无效

时间:2018-02-03 03:30:53

标签: python parsing

嘿,伙计们,所以我有一个问题,我一直想弄清楚。我一直在使用这段代码

#!/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

并且想知道为什么,因为我认为我正确地设置了一切。

我需要解析程序运行的两个文件。

任何人都可以诊断出我做错的事吗?

2 个答案:

答案 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.tracefileargs.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']