Python Argparse с форматом времени - PullRequest
0 голосов
/ 24 марта 2012

У меня есть скрипт, который принимает чч: мм: сс входные данные

например

vid_cut.py -t 00:00:30 00:10:00

, но когда я делаю

from sys import argv
from argparse import ArgumentParser as AP

ap = AP()
ap.add_argument('-f',type=str)
ap.add_argument('-tp',nargs='+',type=str)

arg = ap.parse_args(argv)

print arg['-tp']

я получил

vid_cut.py: error: unrecognized arguments: vid_cut.py

как я могу заставить argparse понимать мои входные данные?

updates

Теперь я решил проблему, используя следующий код

# imports
from os import system as sc
from sys import argv
from argparse import ArgumentParser as AP
from itertools import tee , izip



# cmd synthesis
ap = AP()
ap.add_argument('-f',type=str)
#ap.add_argument('-tp',nargs='+',type=str)
ap.add_argument('-tp',nargs='+',type=str)

arg = vars(ap.parse_args())

print argv
print arg
f_name = arg['f']
tp = map(HMS_S, arg['tp'])

ffmpeg_cmd = "ffmpeg -sameq -ss %s -t %s -i %s %s"

# system call 

for t,dt in diff(tp):
    print ffmpeg_cmd % (t,dt,f_name,f_name + str(t))

.вопрос в том, я не знаю, почему, когда нам нужно сделать arg = vars (ap.parse_args (что-то))

кажется, что argv был волшебным образом обработан.

ответ: argv [1:] будет автоматически обработан, если у вас нет другого материала для разбора.

Ответы [ 2 ]

3 голосов
/ 24 марта 2012

Поскольку вы не дали много кода, я покажу пример, который будет работать:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-t', nargs='+', type=str)

# If no argument is given to parse_args() then the argument strings of
# the program are taken from sys.argv. And be sure not to pass in
# sys.argv[0] if you specify them instead supply sys.argv[1:].
args = parser.parse_args()

print(args.t)

Если запустить с аргументом "-t 00:00:30 00:10:00", я получу это значение обратно:

['00:00:30', '00:10:00']
1 голос
/ 24 марта 2012

Без дополнительного кода трудно понять, что не так, но вы можете передать все sys.argv на parse_args(). Вы должны передать sys.argv[1:], то есть только аргументы, а не имя программы.

...