Ошибка: дано более одного имени файла - PullRequest
0 голосов
/ 17 ноября 2018

Я хочу изменить теги всех моих файлов MKV.Я установил MKVToolNix.Мой код:

#!/usr/bin python3
# -*- coding: utf-8 -*-

import os
import subprocess
import re

neredebu='/home/pi/hrc2/Film-Dizi/duzenle'

for kokdizin, altdizinler, dosyalar in os.walk(neredebu):
    for dosya in dosyalar:
        if dosya.endswith('.mkv'):

            isim=re.findall('([\w\d.]*)\.[\d]{4}\.m1080p.',dosya)[0]
            isim=isim.replace(".", " ")
            yil=re.split('[\w\d.]*\.([\d]{4})\.m1080p.',dosya)[1]
            title=isim+" - "+yil+" _ www.netmanyagi.com"

            dosyayolu=kokdizin
            dosyatam=dosyayolu+"/"+dosya

            bashCommand = "mkvpropedit "+dosyatam+" --edit info --set \"title="+title+"\""
            process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
            output, error = process.communicate()
            #output = subprocess.check_output(['bash','-c', bashCommand])
            print(output)

            print("---")

Я получаю этот вывод:

b"Error: More than one file name has been given ('/home/pi/hrc2/Film-Dizi/duzenle/The' and 'Hero').\n"
---

В чем причина этой ошибки?

1 Ответ

0 голосов
/ 17 ноября 2018

Проблема в том, что один из ваших .mkv файлов содержит пробел в имени файла.Таким образом, когда вы разделяете bashCommand для создания списка, вы непреднамеренно разбиваете имя файла на две части.

Самый простой способ - переименовать файл, чтобы он не содержал пробела.Также может быть безопаснее создать список вручную, а не полагаться на split() и убедиться, что имя файла заключено в кавычки.

bashCommand = [
    'mkvpropedit',
    '"{}"'.format(dosyatam),
    '--edit',
    'info',
    '--set',
    '"title={}"'.format(title)
]
process = subprocess.Popen(bashCommand, stdout=subprocess.PIPE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...