用于更新参数解析器参数的'for loop'



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

文件行看起来像" video_id name"。我将此Video_ID值传递给我的函数,该函数的" ArgParser函数"失败。在尝试启动此args = argparser.parse_args()

时,第一次迭代代码失败

有没有办法可以清除Argparser?我为此谷歌搜索,但是似乎没有解决我特定不断变化的Argparser参数价值的解决方案。此链接禁用/删除Argparse中的参数建议创建父parser,但我不明白它如何帮助我的问题。

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)

您的ytSearchLaunch函数正在采用由其他代码创建的argparser对象,向其添加了几个参数,然后解析命令行值(您也可以在sys.argv中看到)。然后,它将结果args名称空间对象传递给youtube_search

如果您显示了argparser是如何创建的,或者至少显示其产生的helpusage,这将有所帮助。解析后可以看到args对象也很高兴。

如果我阅读了此正确的内容,则每次使用不同的-q默认值来多次解析输入。但是您不能多次将相同的参数添加到argparser。您可以做一次,但是在重复呼叫时,您必须修改现有参数。

这是一个可能的修复:

def ytSearchLaunch(video_id, added_actions=[]):
  if len(added_actions)==0: # first time
      a1 = argparser.add_argument("--q", help="Search term", default=video_id)
      a2 = argparser.add_argument("--max-results", help="Max results", default=25)
      added_actions.append(a1)
      added_actions.append(a2)
  else:         # repeats
      # change defaults to the -q argument without adding a new one
      added_actions[0].default = video_id
  args = argparser.parse_args()
  youtube_search(args)

相关内容

  • 没有找到相关文章

最新更新