'for loop' 用于更新 argparser 参数

'for loop' for updating argparser argument

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

文件行看起来像这样 'video_id name'。我将此 video_id 值传递给我的函数,但 'argparser function' 失败了。 第一次迭代代码失败后 尝试启动此 args = argparser.parse_args()

有没有办法清除 argparser?我用谷歌搜索,但似乎没有针对我不断变化的 argparser 参数值的解决方案。 link 建议创建父解析器,但我不明白它对我的问题有何帮助。

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)