команда, работающая с cmd, но не из кода python

Я пытаюсь преобразовать файл 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 = avconv -i test.mp4 -f wav test.wav

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


person Sam    schedule 28.04.2019    source источник


Ответы (2)


Я предполагаю, что он не находит исполняемый файл 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 может помочь.

person CryptoFool    schedule 28.04.2019

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

import os

print(os.getcwd())

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

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

os.chdir(„your/file/directory“)
person Pablo Henkowski    schedule 28.04.2019