Использование argparser в сочетании с вопросами к пользователю - PullRequest
1 голос
/ 02 апреля 2020

, поэтому я пытаюсь сделать мой код пригодным для использования, хотя argparse, но я ожидаю, что большинство пользователей не очень знакомы с тем, как что-то запускать в консоли. Является ли это способом, которым я бы просил ввод через вопросы.

Как:

Please provide the path to the data:
/home/usr/...

What is the target variable? 
y

И так далее, возможно ли это даже с argparser или я должен искать что-то еще

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

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))
0 голосов
/ 02 апреля 2020

Вы можете использовать ввод

import argparse

args = argparse.ArgumentParser()

args.name = input("enter your name:\n")

print("Your name is :\n",args.name)
...