values - 当没有任何参数调用脚本时,用python argparse显示帮助消息
python argparse安装 (8)
你可以使用optparse
from optparse import OptionParser, make_option
parser = OptionParser()
parser.add_option('--var',
help='put the help of the commandline argument')
(options, args) = parser.parse_args()
./myprogram --help
will print all the help messages for each given argument.
这可能是一个简单的。 假设我有一个使用argparse来处理命令行参数/选项的程序。 以下将打印'帮助'消息:
./myprogram -h
要么:
./myprogram --help
但是,如果我没有任何争论地运行剧本,它什么都不会做。 我想要它做的是在不带参数调用时显示用法消息。 这是如何完成的?
如果你需要灵活的地方,如果你想显示帮助,如果通过了特定的参数,根本没有或者多于1个冲突的参数:
import argparse
import sys
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-d', '--days', required=False, help="Check mapped inventory that is x days old", default=None)
parser.add_argument('-e', '--event', required=False, action="store", dest="event_id",
help="Check mapped inventory for a specific event", default=None)
parser.add_argument('-b', '--broker', required=False, action="store", dest="broker_id",
help="Check mapped inventory for a broker", default=None)
parser.add_argument('-k', '--keyword', required=False, action="store", dest="event_keyword",
help="Check mapped inventory for a specific event keyword", default=None)
parser.add_argument('-p', '--product', required=False, action="store", dest="product_id",
help="Check mapped inventory for a specific product", default=None)
parser.add_argument('-m', '--metadata', required=False, action="store", dest="metadata",
help="Check mapped inventory for specific metadata, good for debugging past tix", default=None)
parser.add_argument('-u', '--update', required=False, action="store_true", dest="make_updates",
help="Update the event for a product if there is a difference, default No", default=False)
args = parser.parse_args()
days = args.days
event_id = args.event_id
broker_id = args.broker_id
event_keyword = args.event_keyword
product_id = args.product_id
metadata = args.metadata
make_updates = args.make_updates
no_change_counter = 0
change_counter = 0
req_arg = bool(days) + bool(event_id) + bool(broker_id) + bool(product_id) + bool(event_keyword) + bool(metadata)
if not req_arg:
print("Need to specify days, broker id, event id, event keyword or past tickets full metadata")
parser.print_help()
sys.exit()
elif req_arg != 1:
print("More than one option specified. Need to specify only one required option")
parser.print_help()
sys.exit()
# Processing logic here ...
干杯!
如果您必须为运行脚本指定参数,请使用ArgumentParser 所需的参数,如下所示: -
parser.add_argument('--foo', required=True)
如果脚本运行时没有任何参数,parse_args()会报告一个错误。
把我的版本扔进这堆:
import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args()
if not vars(args):
parser.print_help()
parser.exit(1)
您可能会注意到parser.exit
- 我主要这样做,因为如果这是文件中sys
的唯一原因,它会保存一条导入行......
有了argparse,你可以做到:
parser.argparse.ArgumentParser()
#parser.add_args here
#sys.argv includes a list of elements starting with the program
if len(sys.argv) < 2:
parser.print_usage()
sys.exit(1)
用nargs设置你的位置参数,并检查位置参数是否为空。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('file', nargs='?')
args = parser.parse_args()
if not args.file:
parser.print_help()
这个答案来自Steven Bethard 在谷歌小组 。 为了让没有Google帐户的用户可以轻松访问,我将其重新发布。
您可以覆盖error
方法的默认行为:
import argparse
import sys
class MyParser(argparse.ArgumentParser):
def error(self, message):
sys.stderr.write('error: %s\n' % message)
self.print_help()
sys.exit(2)
parser = MyParser()
parser.add_argument('foo', nargs='+')
args = parser.parse_args()
请注意,上述解决方案将在触发error
方法时打印帮助消息。 例如,如果--blah
不是有效选项,则test.py --blah
也会打印帮助消息。
如果只在命令行中没有提供参数的情况下打印帮助信息,那么这也许是最简单的方法:
import argparse
import sys
parser=argparse.ArgumentParser()
parser.add_argument('foo', nargs='+')
if len(sys.argv)==1:
parser.print_help(sys.stderr)
sys.exit(1)
args=parser.parse_args()
请注意, parser.print_help()
默认打印到标准输出。 如init_js所示 ,使用parser.print_help(sys.stderr)
打印到stderr。
parser.print_help()
parser.exit()
parser.exit
方法也接受一个status
(returncode)和一个message
值(自己包含一个尾随的换行符)。
一个自以为是的例子,:)
#!/usr/bin/env python3
""" Example argparser based python file
"""
import argparse
ARGP = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawTextHelpFormatter,
)
ARGP.add_argument('--example', action='store_true', help='Example Argument')
def main(argp=None):
if argp is None:
argp = ARGP.parse_args() # pragma: no cover
if 'soemthing_went_wrong' and not argp.example:
ARGP.print_help()
ARGP.exit(status=128, message="\nI just don't know what went wrong, maybe missing --example condition?\n")
if __name__ == '__main__':
main() # pragma: no cover
示例调用:
$ python3 ~/helloworld.py; echo $? usage: helloworld.py [-h] [--example] Example argparser based python file optional arguments: -h, --help show this help message and exit --example Example Argument I just don't know what went wrong, maybe missing --example condition? 128 $ python3 ~/helloworld.py --example; echo $? 0