Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向argparse参数添加附加参数_Python_Argparse - Fatal编程技术网

Python 向argparse参数添加附加参数

Python 向argparse参数添加附加参数,python,argparse,Python,Argparse,我是python中使用arparse模块的新手,希望有人能帮助我解决以下问题。 我使用以下方法指定可变数量的文件作为输入: parser = argparse.ArgumentParser(description='Get Files') parser.add_argument('-i','--input', help='Input file(s)',required=True, nargs='+') args = parser.parse_args() 我想指定一个可变数量的文件输

我是python中使用arparse模块的新手,希望有人能帮助我解决以下问题。 我使用以下方法指定可变数量的文件作为输入:

parser = argparse.ArgumentParser(description='Get Files')    
parser.add_argument('-i','--input', help='Input file(s)',required=True, nargs='+') 
args = parser.parse_args()
我想指定一个可变数量的文件输入,每个文件输入都有一个1或2的关联值,但我不确定如何做到这一点

我希望程序正常工作,以便我的命令行条目应为:

MyProgram.py -i myfile.txt 2 secondfile.txt 1 ...

一旦我完成了这项工作,我如何调用程序中的每个文件?

您的代码可以正常工作。您可以使用循环遍历
args。一次输入两项:

import argparse
parser = argparse.ArgumentParser(description='Get Files')    
parser.add_argument('-i','--input', help='Input file(s)',required=True, nargs='+') 
args = parser.parse_args()
for filename, num in zip(*[iter(args.input)]*2):
    print(filename, num)
    # with open(filename) as f:
    #     ....
屈服

('myfile.txt', '2')
('secondfile.txt', '1')

您最好使用
sys.argv
as

import sys, os

variables = list()
filenames = list()

if( len( sys.argv ) > 1 ):
    if( sys.argv[1] == '-i' )or( sys.argv[1] == '--input' ):
        N = len( sys.argv[1:] )
        for i in range( 2, N, 2 ):
            variables.append( int( sys.argv[i] ) )
            filenames.append( sys.argv[i+1] )

for file in filenames:
    # do something here
    os.system( 'less '+file )
我还没有测试过这个,但应该可以。试试这个:

parser = argparse.ArgumentParser(description='Get Files')    
parser.add_argument('-i','--input', help='Input file(s)',
    required=True, nargs='+', action='append')

args = parser.parse_args()

对于每对输入,使用
-i
一次会更清晰,如下所示:

parser.add_argument("-i", "--input", nargs=2, action='append')
现在,
args.input
将是一个列表列表,如下所示

 [ ['myfile.txt', 2], ['secondfile.txt', 1] ]
由于每个文件需要显式键入一次
-i
,因此用户需要稍微多键入一次

另一个选项是将每个参数指定为单个单词,然后使用
类型
参数解析单词。我也会去掉
-I
参数,并对所需的“选项”使用位置参数

用法将是

myscript.py myfile.txt:1 secondfile.txt:2 ...
myscript.py myfile.txt:1 secondfile.txt:2 ...