Я новичок, так что это может быть не очень хороший ответ, но я пытаюсь сделать то же самое (разрешить один или несколько файлов в командной строке, по умолчанию STDIN в противном случае).
Последняя комбинация, которую я собрал:
parser = argparse.ArgumentParser()
parser.add_argument("infiles", nargs="*")
args = parser.parse_args()
for line in fileinput.input(args.infiles):
process(line)
Это кажется единственным способом получить все желаемое поведение в одном элегантном пакете, не требуя именованных аргументов. Также как команды unix используются как таковые:
cat file1 file2
wc -l < file1
Не
cat --file file1 --file file2
Буду признателен за обратную связь / подтверждение от старых идиоматических Pythonistas, чтобы убедиться, что у меня есть лучший ответ. Никогда не видел это полное решение, упомянутое где-либо еще, только фрагменты.