Python3命令行参数
我正在尝试创建一个python脚本,它将接受来自命令行的一些参数。我正在尝试使用argparse,但无法使其正常工作 我需要它与aws cli的工作方式类似,例如aws s3 cp有自己的参数、aws s3 ls、有自己的参数等等 参考:Python3命令行参数,python,python-3.x,Python,Python 3.x,我正在尝试创建一个python脚本,它将接受来自命令行的一些参数。我正在尝试使用argparse,但无法使其正常工作 我需要它与aws cli的工作方式类似,例如aws s3 cp有自己的参数、aws s3 ls、有自己的参数等等 参考: 这就是我所拥有的,但它总是需要mycmd选项 import argparse parser = argparse.ArgumentParser() parser.add_argument("mycmd", help="my test cmd") pars
这就是我所拥有的,但它总是需要mycmd选项
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("mycmd", help="my test cmd")
parser.add_argument("-v", "--verbose", help="Verbose output", action="store_true")
args = parser.parse_args()
if args.mycmd:
print(f"arg is mycmd")
if args.verbose:
print("args v")
最终结果应该是mycmd1有参数xyz,mycmd2有参数abc等,这两个参数都可以从一个python文件运行,例如python3 somename.py mycmd1-x…我认为您的代码是完全有效的。“mycmd”只是参数的名称。我对您的代码做了一些更改以使其更清晰:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("mycmd", help="my test cmd")
parser.add_argument("-v", "--verbose", help="Verbose output", action="store_true")
args = parser.parse_args()
if args.mycmd == "mycmd1":
print(f"arg is mycmd1")
elif args.mycmd == "mycmd2":
print(f"arg is mycmd2")
else:
print("arg not allowed")
if args.verbose:
print("args v")
在我的机器上:
$ python3 test.py mycmd1 -v
arg is mycmd1
args v
$ python3 test.py 12 -v
arg not allowed
args v
$ python3 test.py mycmd2 -v
arg is mycmd2
args v
根据argparse文档,如果您没有说明位置参数是否是可选的,则始终需要它 您可以说明希望您的选项被
nargs
使用多少次。在您的情况下,添加nargs='?'
使其成为可选的(类似于在正则表达式中的解释,?
表示“0或1”)
另请参见-有一些很好的可选输入/输出文件位置参数示例
在您的情况下,您可能会发现有用的父arg解析器。-请记住阅读有关处理冲突参数的部分(默认情况下,两个解析器都有
-h
选项,但您可能还需要对自己的参数进行一些调整)。您可以使用,它明确支持子命令:
import click
@click.group()
def cli():
pass
@cli.command()
@click.option('--arg1')
def mycmd1(arg1):
click.echo('My command 1')
if arg1:
click.echo(arg1)
@cli.command()
@click.option('--arg2')
def mycmd2(arg2):
click.echo('My command 2')
if arg2:
click.echo(arg2)
if __name__ == '__main__':
cli()
用法:
(~)$ python -m click-example --help
Usage: click-example.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
mycmd1
mycmd2
(~)$ python -m click-example mycmd1 --help
Usage: click-example.py mycmd1 [OPTIONS]
Options:
--arg1 TEXT
--help Show this message and exit.
(~)$ python -m click-example mycmd2 --help
Usage: click-example.py mycmd2 [OPTIONS]
Options:
--arg2 TEXT
--help Show this message and exit.
(~)$ python -m click-example mycmd2 --arg1 err
Usage: click-example.py mycmd2 [OPTIONS]
Try "click-example.py mycmd2 --help" for help.
Error: no such option: --arg1
(~)$ python -m click-example mycmd1 --arg1 hello
My command 1
hello
(~)$
c、 派克
“但它总是需要mycmd选项”——那你为什么要添加它?我不明白你在问什么。
import argparse
import sys
parser = argparse.ArgumentParser(
prog='c', description="Description: to do some task",
epilog='Run c.py --help for more information')
subparser = parser.add_subparsers(title="Commands", help="commands")
mycmd_args = subparser.add_parser('mycmd', help='to dome some task',description="To do some task")
mycmd_args.add_argument("--arg1", "-a1", dest="argument1",help="provide argument")
mycmd_args.add_argument("--arg2", "-a2", dest="argument2",help="provide argument")
mycmd1_args = subparser.add_parser('mycmd1', help='to dome some task',description="To do some task")
mycmd1_args.add_argument("--arg1", "-a1", dest="argument1",help="provide argument")
mycmd1_args.add_argument("--arg2", "-a2", dest="argument2",help="provide argument")
if __name__=="__main__":
args=parser.parse_args(sys.argv[1:])
if len(sys.argv) <= 1:
sys.argv.append("-h")
elif sys.argv[1] == "mycmd":
print("mycmd arguemnts")
print(args.argument1)
print(args.argument2)
elif sys.argv[1] == "mycmd1":
print("mycmd1 arguemnts")
print(args.argument1)
print(args.argument2)
else:
sys.argv.append("-h")
C:\Users\jt250054\Desktop>python c.py --help
usage: c [-h] {mycmd,mycmd1} ...
Description: to do some task
optional arguments:
-h, --help show this help message and exit
Commands:
{mycmd,mycmd1} commands
mycmd to dome some task
mycmd1 to dome some task
Run c.py --help for more information
C:\Users\jt250054\Desktop>python c.py mycmd --help
usage: c mycmd [-h] [--arg1 ARGUMENT1] [--arg2 ARGUMENT2]
To do some task
optional arguments:
-h, --help show this help message and exit
--arg1 ARGUMENT1, -a1 ARGUMENT1
provide argument
--arg2 ARGUMENT2, -a2 ARGUMENT2
provide argument
C:\Users\jt250054\Desktop>python c.py mycmd --arg1 argument1
mycmd arguemnts
argument1
None
C:\Users\jt250054\Desktop>python c.py mycmd --arg1 argument1 --arg2 arugment2
mycmd arguemnts
argument1
arugment2
C:\Users\jt250054\Desktop>