TypeError: execv() arg 2 должен содержать только строки с использованием docopt

Я столкнулся со следующей ошибкой при передаче аргументов. Может ли кто-нибудь помочь мне определить эту проблему? Я передаю инструкции своей функции в терминале следующим образом:

python makeQuicktime.py -i /Volumes/P003A/TM_Cloud/Nagrania/Karta_04/XDROOT/Clip/D004C010_141026MM.MXF -f 25 -c prores

Это функция main — как видите, я пытался передать аргумент --codec как строку:

if __name__ == "__main__":
    args = docopt(__doc__, version='makeQuicktime 0.0.1')
    print args
    cmd_args = ""
    codec=str(args['--codec'])

    makeQuicktime( args['--input'], fps=args['--fps'], codec=str(args['--codec']) )

    os._exit(0)

Часть другой функции, которую выполняет этот код (makeProRes, строка 110 — это выходная переменная):

subprocess.call([FFMPEG_PATH, 'i', input,
    '-start_number', start_frame, '-r', fps,
    '-c:v', 'prores',
    '-profile:v', '2',
    '-c:a', 'copy',
    '-threads', cpus,
    output
  ])

Ошибка:

Traceback (most recent call last):
  File "makeQuicktime.py", line 123, in <module>
    makeQuicktime( args['--input'], fps=args['--fps'], codec=str(args['--codec']) )
  File "makeQuicktime.py", line 53, in makeQuicktime
    makeProRes(1, input, fps, output)
  File "makeQuicktime.py", line 110, in makeProRes
    output
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1308, in _execute_child
    raise child_exception
TypeError: execv() arg 2 must contain only strings

person Mateusz Wójt    schedule 30.10.2014    source источник
comment
str() вокруг args['--codec'] не требуется, если только docopt не преобразует строковые аргументы в другой тип (насколько я знаю, это не так).   -  person jfs    schedule 30.10.2014


Ответы (1)


Один из start_frame, fps или cpus является числом, а не строкой. Когда вы узнаете какой, заключите его в str(), чтобы преобразовать.

person John Zwinck    schedule 30.10.2014
comment
также (маловероятно, но все же): input, output переменные. - person jfs; 30.10.2014