argparse
только аргументы командной строки и не поддерживает запрос пользователя, но это позволяет легко реализовать что-то вроде этого. Он поддерживает необязательные аргументы и после анализа дает вам объект пространства имен, который вы можете использовать. Вам просто нужно реализовать запрос самостоятельно и назначить его в пространство имен.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('path', nargs='?')
parser.add_argument('target', nargs='?')
args = parser.parse_args()
print(args)
if args.path is None:
args.path = input('Please provide the path to the data: ')
if args.target is None:
args.target = input('What is the target variable? ')
print(args)
Тестовые прогоны:
$ ./test.py /somepath spam # All arguments provided
Namespace(path='/somepath', target='spam')
Namespace(path='/somepath', target='spam')
$ ./test.py /otherpath # Forgotten "target"
Namespace(path='/otherpath', target=None)
What is the target variable? eggs
Namespace(path='/otherpath', target='eggs')
$ ./test.py # No arguments provided
Namespace(path=None, target=None)
Please provide the path to the data: /anotherpath
What is the target variable? ham
Namespace(path='/anotherpath', target='ham')
Если у вас более двух параметров, я бы порекомендовал СУШИТЬ выше код, что-то вроде этого:
arg_prompts = [
('path', 'Please provide the path to the data: '),
('target', 'What is the target variable? '),
]
for arg, prompt in arg_prompts:
if getattr(args, arg) is None:
setattr(args, arg, input(prompt))