' for循环'用于更新argparser参数

时间:2017-03-06 23:12:21

标签: python youtube-api argparse

我的代码使用' for循环'和youtube api搜索文件中每一行的youtube视频链接。

文件行看起来像这样' video_id name'。我通过' argparser函数'将此video_id值传递给我的函数。失败了。 尝试启动此args = argparser.parse_args()

后第一次迭代代码失败

有没有办法可以清除argparser?我用Google搜索,但似乎没有解决方案,因为我特别不断改变argparser参数的价值。此链接Disable/Remove argument in argparse建议创建父解析器,但我不明白它如何帮助解决我的问题。

def ytSearchLaunch(video_id):
  argparser.add_argument("--q", help="Search term", default=video_id)
  argparser.add_argument("--max-results", help="Max results", default=25)
  args = argparser.parse_args()
  youtube_search(args)

这是完整的代码。

def youtube_search(options):
  youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
    developerKey=DEVELOPER_KEY)
  search_response = youtube.search().list(
    q=options.q,
    type="video",
    part="id,snippet",
    maxResults=options.max_results
  ).execute()

def ytSearchLaunch(video_id):
  argparser.add_argument("--q", help="Search term", default=video_id)
  argparser.add_argument("--max-results", help="Max results", default=25)
  args = argparser.parse_args()
  youtube_search(args)

def checkDateFunction():
    fname = 'file'
    f = open(fname,'r')
    for l in f:
        video_id = l.split()[0]
        ytSearchLaunch(video_id)

1 个答案:

答案 0 :(得分:2)

您的ytSearchLaunch函数正在使用由其他代码创建的argparser对象,向其添加几个参数,然后解析命令行值(您也可以在{{ 1}})。然后将生成的sys.argv命名空间对象传递给args

如果你展示了youtube_search是如何创建的,或者至少显示它产生的argparserhelp,那将对我们有所帮助。在解析之后看到usage对象也会很高兴。

如果我读得正确,你想多次解析输入,每次都有不同的args默认值。但是你不能多次向-q添加相同的参数。您可以执行一次,但在重复调用时,您必须修改现有参数。

这是一个可能的解决办法:

argparser