Python argparse和sys.argv

时间:2016-12-16 08:17:20

标签: python argparse

我正在创建一个脚本,可以自动从bandcamp购买下载和重命名专辑到我的服务器。现在我将sys.argv传递给脚本,如

python script.py Artistname Albumname Year DownloadLink Genre

然后在脚本中我设置了像

这样的变量
artist = sys.argv[1] 
album = sys.argv[2] 
year = sys.argv[3]
link = sys.argv[4]
genre = sys.argv[5]
do commands with these vars

现在我想使用argparse而不是使用一些帮助命令。我已经阅读了关于它的python文档,但我似乎无法让它工作..任何帮助?

3 个答案:

答案 0 :(得分:1)

您尚未指定实际问题。话虽这么说,我更喜欢在函数中定义我需要的args。

import argparse

def cli_args(self):
    parser = argparse.ArgumentParser(
         description='This is an example')
    parser.add_argument('--arg1', dest='agr1', required=True,
                        help='the first arg. This is required')
    parser.add_argument('--arg2', dest='agr2',default=0,
                        help='another arg. this will default to 0')
     # return dictionary of args
     return vars(parser.parse_args())

答案 1 :(得分:0)

尝试使用click.pocoo.org并不介意使用argparse。

用于自我记录的使用示例(如> python script.py --count 3 --name Nikolay一样启动):

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)

if __name__ == '__main__':
    hello()

如果您想要完全在主题中撰写的内容,请尝试使用@ click.argument而不是选项。

答案 2 :(得分:0)

我试过这个

def main():                                                                                                                       

 parser = argparse.ArgumentParser(description='xxxx', prog='xxxx') 
 parser.add_argument('artist', help='Artist name, separted by "_". Ex: The_Beatles')
 parser.add_argument('album', help='Album title, separated by "_". Ex: The_Joshua_Tree')
 parser.add_argument('yar', help='Release year')
 parser.add_argument('url', help='Bandcamp download url inside bracelets.')
 parser.add_argument('genre', help='Album genre, separted by a point. Ex: hip.hop')
 args = parser.parse_args()

main()

然后在我的脚本中

release = ("%s - %s - (%s) - [FLAC]"%(artist,album,year)).replace('_',' ')               

如果我用

运行脚本
 script.py Artist Album Year URL Genre

它给我一个错误,即未定义全局名称释放。错误在哪里?如果我跑

script.py -h

我对所有位置参数和帮助都有正确的帮助..