Python parser.parse_args(sys.argv[1:])不工作

Python parser.parse_args(sys.argv[1:])不工作,python,parsing,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="

嘿,伙计们,我有个问题一直在想。我一直在使用这个代码

#!/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
我想知道为什么,因为我认为我把一切都安排好了

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

有人能诊断出我做错了什么吗

您想要的是解析已知的参数,而不是解析参数:

调用后,选项将为Namespacecol1=False、col2=False、col3=False、unsorted=False,参数将为['trace.tr','testR']

您想要的是解析已知参数,而不是解析参数:

调用后,选项将是Namespacecol1=False、col2=False、col3=False、unsorted=False,args将是['trace.tr','testR']

如果您希望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或任何在您的场景中有意义的实名后访问它们。

如果您希望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或任何在您的场景中有意义的实名后,您可以访问它们。

arumngparser.parse_args不需要您传入命令行参数。我需要得到我的程序运行的两个文件,但是我不确定我做错了什么。我甚至在没有参数的情况下运行了它,但仍然得到一个错误。arumingparser.parse_args不需要您传入命令行参数。我需要得到我的程序运行的两个文件,但是我不确定我做错了什么。我甚至在没有参数的情况下运行了它,但仍然得到一个错误。谢谢!为什么这项工作与解析参数相反?很奇怪。@MichaelGee:parse_known_args解析它识别的内容,而忽略它不识别的内容。这不是一个很好的解决方案,因为这意味着无法识别的开关会被默默忽略,而不是argparse为您检测并报告误用情况。说得好,@shadowRanger如果您想为解析参数的代码编写一些测试,您会使用什么?你应该模仿这个模块吗?我在尝试使用parse_known_args来容纳unittest标志和参数时遇到了麻烦。谢谢!为什么这项工作与解析参数相反?很奇怪。@MichaelGee:parse_known_args解析它识别的内容,而忽略它不识别的内容。这不是一个很好的解决方案,因为这意味着无法识别的开关会被默默忽略,而不是argparse为您检测并报告误用情况。说得好,@shadowRanger如果您想为解析参数的代码编写一些测试,您会使用什么?你应该模仿这个模块吗?当我试图使用parse_known_参数来容纳unittest标志和参数时,遇到了麻烦。