Python 2.7 为什么运行整个命令行程序需要一个子命令的特定参数?

Python 2.7 为什么运行整个命令行程序需要一个子命令的特定参数?,python-2.7,argparse,subparsers,Python 2.7,Argparse,Subparsers,我正在使用argparse模块构建一个命令行程序,并且一直在尝试设计两个独立的、互斥的参数组,它们执行完全不同的任务。我决定通过创建子parser来分离这两组参数,并尝试遵循以下链接()中指定的格式以及许多stackoverflow线程,但每当我尝试使用终端中的一个子parser运行脚本时,总会产生一个属性错误 我的代码是按以下方式设置的(注意:为了简洁起见,我从我的原始代码中稍微浓缩和简化了以下内容): 现在,如果我尝试使用以下命令在终端中运行此代码,则会出现以下错误: $python MyP

我正在使用argparse模块构建一个命令行程序,并且一直在尝试设计两个独立的、互斥的参数组,它们执行完全不同的任务。我决定通过创建子parser来分离这两组参数,并尝试遵循以下链接()中指定的格式以及许多stackoverflow线程,但每当我尝试使用终端中的一个子parser运行脚本时,总会产生一个属性错误

我的代码是按以下方式设置的(注意:为了简洁起见,我从我的原始代码中稍微浓缩和简化了以下内容):

现在,如果我尝试使用以下命令在终端中运行此代码,则会出现以下错误:

$python MyProg_user_interface.py A -input someinputfilename.txt
AttributeError: 'Namespace' object has no attribute 'B'
如何运行命令行程序,以便一次只能运行一个子parser(及其必需的参数)

更新

找到这个源代码()后,我决定在
A_或_B_subparsers=parser.add_subparsers(help=“A处理某个输入blah blah blah blah”)
行中设置
dest='mode'
,以便根据在命令行中调用的是子命令A还是B,只需在命令行中键入每个子命令所需的参数

随后,我修改了行
args=MyProg.parse_args()
后的条件树,如下所示:

if args.mode == "A":
    input= open(args.input, 'r')
    ###create .csv spreadsheet of input file in working directory
elif args.mode== "B":
    x_number= args.num
    file= args.csv
    ###format existing .csv spreadsheet
    ###print .csv spreadsheet file x_number of times 
else:
    argparse.ArgumentError("too few arguments")

然而,这一修改似乎并没有修正这一问题。虽然子命令A可以正常运行,但子命令B拒绝运行。有人知道这是因为我的代码是如何设置的还是因为另一个内部问题吗?

子命令转到
A
,而不是
-A
。我认为您发布的代码和命令行不能准确反映您的真实情况,我们无法帮助您。我们需要一个。@user2357112是的,你说得对,我将更新我的代码以使其更准确。你对带有各种命令行值的
print(args)
的显示满意吗?子命令go
a
,不是
-A
。我认为您发布的代码和命令行不能准确反映您的真实情况,我们无法帮助您。我们需要一个。@user2357112是的,你说得对,我将更新我的代码以更准确地显示
print(args)
和各种命令行值,你满意吗?
if args.mode == "A":
    input= open(args.input, 'r')
    ###create .csv spreadsheet of input file in working directory
elif args.mode== "B":
    x_number= args.num
    file= args.csv
    ###format existing .csv spreadsheet
    ###print .csv spreadsheet file x_number of times 
else:
    argparse.ArgumentError("too few arguments")