Вы можете определить пользовательское действие, которое позаботится о разделении набора аргументов, используя (почти) любой понравившийся вам разделитель, на входные и выходные файлы.
import argparse
class PartitionedValues(argparse.Action):
def __init__(self, *args, delim="+++", **kwargs):
super().__init__(*args, **kwargs)
self.delim = delimiter
def __call__(self, parser, namespace, values, option_string):
files = namespace.input = []
namespace.output = []
for f in values:
if f == self.delim:
files = namespace.output
else:
files.append(f)
p = argparse.ArgumentParser()
p.add_argument("files", action=PartitionedValues, nargs='+')
args = p.parse_args()
print(args.input)
print(args.output)
Затем вызов, такой как
script.py file1 file2 +++ file3 file4
выдаст
['file1', 'file2']
['file3', 'file4']
в качестве вывода. (Обратите внимание, что сам --
и, по-видимому, все, что начинается с --
, вызовет конец обработки для параметра files
, поэтому вместо него я использовал +++
в качестве разделителя по умолчанию.)
I также сделал разделитель настраиваемым для каждой опции. Вы можете изменить определение аргумента files
на
p.add_argument("files", action=PartitionedValues, delim="+=+", nargs="+")
, а затем вызвать ваш скрипт с помощью
script.py file1 file2 +=+ file3 file4
, чтобы получить тот же вывод.