OSError:[Errno 63]文件名太长

2024-10-03 09:10:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简短的脚本,需要每天晚上将多个MKV文件合并成一个

import os, glob
import subprocess

concatenated_files = ""

os.chdir("/cams/")
for index, file in enumerate(glob.glob("*.mkv")):
    if index == 0:
        concatenated_files = file
    else:
        concatenated_files += " + " + file

# print(concatenated_files)

returncode = subprocess.call("mkvmerge -o out.mkv " + concatenated_files)

我得到以下错误,只有几个文件

OSError: [Errno 63] File name too long: 'mkvmerge -o out.mkv video21-06-28_09-12-08-51.mkv + video21-06-28_07-55-36-80.mkv + video21-06-28_09-52-05-79.mkv + video21-06-28_08-47-56-69.mkv + video21-06-28_09-15-04-34.mkv + video21-06-28_09-32-43-25.mkv

我计划合并数百个,因此不确定如何使用Python对这种情况进行排序。从外壳上看效果很好


Tags: 文件import脚本indexosfilesoutglob
2条回答

也许使用只有三行代码的shell脚本更简单、更清晰:

ls /cams/ | grep -E ".+\.mkv$" | while read filename; do
  filenames="${filenames} ${filename}"
done
mkvmerge -o out.mkv ${filenames}

subprocess.call()第一个参数“args”是一个列表

所以我认为应该是这样的:

  import os, glob
  import subprocess

  concatenated_files = ""

  os.chdir("/cams/")
  args = ["mkvmerge"]
  for index, file in enumerate(glob.glob("*.mkv")):
     args.append(file)


  args.append("-o")        
  args.append("out.mkv")        


  returncode = subprocess.call(args)

相关问题 更多 >