python-使用argparse,但有用于原始输入的选项

python-使用argparse,但有用于原始输入的选项,python,Python,我有一些这样的代码- ## ARGUMENTS parser = argparse.ArgumentParser() parser.add_argument("environment", help="Environment to change queue") parser.add_argument("queue", help="Queue to change") parser.add_argument("limit", help="Limit value") args = parser.pars

我有一些这样的代码-

## ARGUMENTS
parser = argparse.ArgumentParser()
parser.add_argument("environment", help="Environment to change queue")
parser.add_argument("queue", help="Queue to change")
parser.add_argument("limit", help="Limit value")
args = parser.parse_args()

current_user = getpass.getuser()
environment = raw_input("Environment you are in: ")
queue = raw_input("Queue you wish to modify: ")
limit = raw_input("Limit value of Queue: ")
我想做的是,如果调用文件时没有提供参数-

prog.py DEV test_queue 1

我希望它要求输入获取值。

如果您愿意使用命名参数

## ARGUMENTS
import argparse
import getpass

parser = argparse.ArgumentParser()
parser.add_argument("--environment", help="Environment to change queue",
                    default=None)
parser.add_argument("--queue", help="Queue to change", default=None)
parser.add_argument("--limit", help="Limit value", default=None)
args = parser.parse_args()

current_user = getpass.getuser()

environment = args.environment if args.environment else raw_input("Environment you are in: ")
queue = args.queue if args.queue else raw_input("Queue you wish to modify: ")
limit = args.limit if args.limit else raw_input("Limit value of Queue: ")


print environment, queue, limit

如果你愿意使用命名参数

## ARGUMENTS
import argparse
import getpass

parser = argparse.ArgumentParser()
parser.add_argument("--environment", help="Environment to change queue",
                    default=None)
parser.add_argument("--queue", help="Queue to change", default=None)
parser.add_argument("--limit", help="Limit value", default=None)
args = parser.parse_args()

current_user = getpass.getuser()

environment = args.environment if args.environment else raw_input("Environment you are in: ")
queue = args.queue if args.queue else raw_input("Queue you wish to modify: ")
limit = args.limit if args.limit else raw_input("Limit value of Queue: ")


print environment, queue, limit

如果您确实需要位置参数,我建议跳过argparse,使用老式的sys.argv:

import sys
import getpass

current_user = getpass.getuser()
argv = sys.argv[1:]
environment = argv[0] if len(argv) > 0 else raw_input("Environment you are in: ")
queue = argv[1] if len(argv) > 1 else raw_input("Queue you wish to modify: ")
limit = argv[2] if len(argv) > 2 else raw_input("Limit value: ")

如果您确实需要位置参数,我建议跳过argparse,使用老式的sys.argv:

import sys
import getpass

current_user = getpass.getuser()
argv = sys.argv[1:]
environment = argv[0] if len(argv) > 0 else raw_input("Environment you are in: ")
queue = argv[1] if len(argv) > 1 else raw_input("Queue you wish to modify: ")
limit = argv[2] if len(argv) > 2 else raw_input("Limit value: ")

比我想象的优雅多了谢谢!我猜没有办法解决这个问题——环境xxx——队列xxx——限制x?让我得到了答案,我通过做下面的
解析器摆脱了命名参数。添加参数('environment',nargs='?',default=None)
解析器。添加参数('queue',nargs='?',default=None)
解析器。添加参数('limit',nargs='?',default=None)
可能(例如)
args.environment如果args.environment不是None….
会更好,因为提供空字符串作为参数值可能是有效的。比我想象的要优雅得多谢谢!我猜没有办法解决整个问题--环境xxx--队列xxx--限制x?找到答案了我去掉了命名的argu通过执行以下操作来执行语法分析器。添加参数('environment',nargs='?',default=None)
语法分析器。添加参数('queue',nargs='?',default=None)
语法分析器。添加参数('limit',nargs='?',default=None)
可能(例如)
args.environment如果args.environment不是None….
会更好,因为提供空字符串作为参数值可能是有效的。