Python 结合向用户提问使用argparser

Python 结合向用户提问使用argparser,python,argparse,Python,Argparse,因此,我试图使我的代码可用,尽管argparse,但我希望大多数用户不太熟悉在控制台中运行某些东西。这是我通过提问请求输入的一种方式 比如: 依此类推,使用argparser是否可能,或者我是否应该寻找其他可以使用输入的东西 import argparse args = argparse.ArgumentParser() args.name = input("enter your name:\n") print("Your name is :\n",args.name) argparse

因此,我试图使我的代码可用,尽管
argparse
,但我希望大多数用户不太熟悉在控制台中运行某些东西。这是我通过提问请求输入的一种方式

比如:

依此类推,使用
argparser
是否可能,或者我是否应该寻找其他可以使用输入的东西

import argparse

args = argparse.ArgumentParser()

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

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

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垃圾邮件#提供了所有参数
命名空间(路径='/somepath',目标='spam')
命名空间(路径='/somepath',目标='spam')
$./test.py/otherpath#忘记了“目标”
命名空间(路径='/otherpath',目标=无)
目标变量是什么?鸡蛋
命名空间(路径='/otherpath',目标='egs')
$./test.py#未提供任何参数
命名空间(路径=无,目标=无)
请提供数据路径:/anotherpath
目标变量是什么?火腿
命名空间(路径='/anotherpath',目标='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))
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))