команда, работающая с cmd, но не из кода Python - PullRequest
2 голосов
/ 28 апреля 2019

Я пытаюсь преобразовать файл test.mp4 в test.wav из кода Python, используя avconv.Я могу конвертировать test.mp4 в test.wmv, используя строку cmd, но когда я запускаю ту же команду из python, она выдает мне следующую ошибку:

строка 103 в подпрограмме get_message_audio subprocess.call (cmdline) FileNotFoundError:[WinError 2] Системе не удается найти указанный файл

Код, который я использую из файла python:

cmdline = ['avconv', '-i', 'test.mp4', '-vn', '-f', 'wav', 'test.wav']

subprocess.call (cmdline)

Но когда я запускаю ту же команду из cmd, она успешноЗапускает и сохраняет файл test.wav.

cmd line = avconv -i test.mp4 -f wav test.wav

Примечание. Я добавил avconv в системную переменную.Файл python и test.mp4 находятся в одном каталоге.Я также запускаю cmd из той же директории.

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Я предполагаю, что он не находит исполняемый файл avconv. Я бы посоветовал вам использовать полный абсолютный путь к avconv в вашей команде в Python. Еще одна вещь, которую вы можете попробовать - это использовать оболочку, добавив shell=True к вашему вызову subprocess.call().

Другими словами, сделайте это и посмотрите, поможет ли это:

cmdline = [r'\full\path\to\avconv', '-i', 'test.mp4', '-vn', '-f', 'wav', 'test.wav']
subprocess.call(cmdline, shell=True)

Я не думаю, что это входной файл, который он не может найти. Кажется, это далеко не уходит. В момент сбоя subprocess.call(cmdline), test.mp4 и test.wav - это просто строки, передаваемые в avconv.

Я предполагаю, что avconv отсутствует в PATH среды, в которой Python выполняет команду. shell=True может помочь этому.

0 голосов
/ 28 апреля 2019

Возможно, местоположение файла не является вашим текущим рабочим каталогом. Добавить

import os

print(os.getcwd())

Чтобы проверить, где ваш скрипт ищет файлы.

Если это не то место, вы можете использовать

os.chdir(„your/file/directory“)
...