错误:已指定多个文件名

时间:2018-11-17 12:43:39

标签: python subprocess

我想更改所有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 :(得分:0)

问题是您的.mkv文件之一在其文件名中包含空格。因此,当您将bashCommand拆分为一个列表时,会无意间将文件名拆分为两部分。

最简单的方法是重命名文件,使其不包含空格。手动构建列表而不是依靠split()并确保将文件名用引号引起来也可能更安全。

bashCommand = [
    'mkvpropedit',
    '"{}"'.format(dosyatam),
    '--edit',
    'info',
    '--set',
    '"title={}"'.format(title)
]
process = subprocess.Popen(bashCommand, stdout=subprocess.PIPE)