2012-03-24 2 views
0

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

, например

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 

как я могу заставить argpse понять мой inp UTS?

обновления

Теперь я решил эту проблему, с помощью следующего кода

# 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 = вары (ар. parse_args (что-то))

похоже, что argv был магически обработан.

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

+0

Не могли бы вы предоставить немного больше кода, пожалуйста? –

+0

Благодарю вас за комментарий, я поместил весь код в соответствии с запросом. –

ответ

3

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

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'] 
+0

привет, спасибо за ответ, я поместил весь код в сообщение, почему вы не передаете argv parse_args()? –

+0

Это потому, что если вы ничего не передадите ['parse_args()'] (http://docs.python.org/dev/library/argparse.html#argparse.ArgumentParser.parse_args), то он будет использовать 'sys .argv [1:] 'автоматически. –

+0

круто, хорошо знать, также, пожалуйста, оцените меня, я положил весь код в свой пост сейчас. :) –

1

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

+0

Благодарим вас за ответ! –

Смежные вопросы