Я пытаюсь выполнить версию Mac, которая отлично работает под Windows, используя python 2.7. В Mac (OS X El Capitan, работающем в VirtualBox), он терпит неудачу, потому что аргументы, которые я передаю в оболочку, не распознаются должным образом.Ошибка аргументов подпроцесса Python 2 под Mac
Оригинальный код:
for item in source_files:
# core process
output = sub.Popen(["mhl", "verify", "-vv", "-f", item, ">", text_report],
shell=True,
stdout=sub.PIPE,
stderr=sub.PIPE)
stdout_value, stderr_value = output.communicate()
Под Mac только аргумент 'MHL' признается, поэтому я попытался это:
sub.Popen(['mhl verify -vv -f', item, '>', text_report]
Сейчас команда работает, но элемент (.mhl файл) не признается, поэтому я попытался это:
sub.Popen(['mhl verify -vv -f', '/Users/simon/Documents/Documents.mhl', '>', text_report]
и это:
sub.Popen(['mhl verify -vv -f', r'/Users/simon/Documents/Documents.mhl', '>', text_report]
Те же результаты, он сообщает мне, что файл mhl должен следовать аргументу '-f'. Если я добавлю элемент непосредственно к первому аргументу, он отлично работает:
sub.Popen(['mhl verify -vv -f /Users/simon/Documents/Documents.mhl', '>', text_report]
Что мне здесь не хватает?
Спасибо за ваш ответ, но он не работает, так как с исходным кодом признается только аргумент «mhl», он сообщает мне «недопустимое количество аргументов». Фактически 'mhl verify -vv -f' распознается должным образом в качестве вызова исполняемого файла mhl с аргументами 'verify -vv -f', но он сообщает мне, что файл mhl должен следовать за аргументом '-f'. –
@SimonTheChain: вы также передаете 'item','> 'и' text_report'. –
@SimonTheChain: обновлено; Я пропустил, что у вас есть набор «shell = True». У вас все еще есть команда 'mhl verify -vv -f item', выполняемая здесь. –