Python argparse:位置参数的单独选项

Rou*_*oux 5 python argparse

我编写了一个带有一个或多个输入文件的脚本.我希望能够单独指定脚本(A和B)和每个输入文件的选项(C和D).

用法应如下所示:

script.py [-A] [-B]  [-C] [-D] file1 [[-C] [-D] file2] ...
Run Code Online (Sandbox Code Playgroud)

怎么办argparse

谢谢!

Rou*_*oux 1

像往常一样,这个问题似乎不完全是所需要的……抱歉。这是我的工作结果(受到 unutbu 的答案的启发),它还允许带有参数的每个文件选项。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-A', action = 'store_true')
parser.add_argument('-B', action = 'store_true')
args, unk = parser.parse_known_args()

file_parser = argparse.ArgumentParser()
file_parser.add_argument('-C', action = 'store_true')
file_parser.add_argument('-D', action = 'store_true')
file_parser.add_argument('-V', "--variable-list")
file_parser.add_argument('file')

fargs=[]
n=len(unk)
while True:
        i=0
        for i in  range(n): # finding longest fully parsable tail
            Parsed, unkf = file_parser.parse_known_args(unk[i:n])
            if not unkf: break
        if i==n: # did not found parsable tail
            file_parser.parse_args(unk[0:n]) # cause error 
        else:
            fargs.append(Parsed)
            n=i
        if (n<=0): break
fargs.reverse()

print args
for argl in fargs:
        print argl
Run Code Online (Sandbox Code Playgroud)

调用此方法:

myscript.py -A -B -C -D file1 -C -V a,b,c file
Run Code Online (Sandbox Code Playgroud)

产量:

Namespace(A=True, B=True)
Namespace(C=True, D=True, file='file1', variable_list=None)
Namespace(C=True, D=False, file='file2', variable_list='a,b,c')
Run Code Online (Sandbox Code Playgroud)