Перевернутая строка в subprocess.call () - PullRequest
0 голосов
/ 26 апреля 2020
import os,subprocess,io

path = "C:\\Users\\Awesome\\Music\\unconverted"
des = "C:\\Users\\Awesome\\Music\\converted"

    def convert( path, des):
        command = "ffmpeg -i " +path+" -ab 192k "+des + "-y "
        subprocess.call(command)

    for song in os.listdir(path):
        filepath = os.path.join(path,song)
        despath = os.path.join(des, song[len(song)-3]+"mp3")
        convert(filepath,despath)
    print("complete")

этот код возвращает эту ошибку

C:\Users\Awesome\Music\unconverted\KYLE: No such file or directory

полное имя файла C:\Users\Awesome\Music\unconverted\KYLE - Playinwitme (feat Kehlani).m4a Я понятия не имею, почему оно обрезается после первого слова.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Проблема в том, что в команде будет путь с пробелом, например ffmpeg -i C:\\Users\\Awesome\\Music\\unconverted\\KYLE - Playinwitme (feat Kehlani).m4a ...... Вы должны удалить пробелы из имени файла или вставить все имя в двойные кавычки. Также измените song[len(song)-3]+"mp3" на song[0 : len(song)-3]+"mp3"

import os,subprocess,io

path = "C:\\Users\\Awesome\\Music\\unconverted"
des = "C:\\Users\\Awesome\\Music\\converted"

    def convert( path, des):
        command = "ffmpeg -i " + f"\"{path}\"" + " -ab 192k " + f"\"{des}\"" + " -y"
        subprocess.call(command)

    for song in os.listdir(path):
        filepath = os.path.join(path,song)
        despath = os.path.join(des, song[0 : len(song)-3]+"mp3")
        convert(filepath,despath)

    print("complete")
1 голос
/ 26 апреля 2020

Вместо формирования командной строки и передачи ее в subprocess.call, передача ее в виде списка аргументов методу поможет.

import os,subprocess,io

path = "C:\\Users\\Awesome\\Music\\unconverted"
des = "C:\\Users\\Awesome\\Music\\converted"

def convert( path, des):
    command_lis = ["ffmpeg", "-i", path, "-ab", "192k",des,"-y"]
    subprocess.call(command_lis)

for song in os.listdir(path):
    filepath = os.path.join(path,song)
    despath = os.path.join(des, song[0:len(song)-3]+"mp3")
    convert(filepath,despath)
print("complete")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...