簡體   English   中英

OSError: [Errno 63] 文件名太長

[英]OSError: [Errno 63] File name too long

我有一個簡短的腳本,需要每天晚上將多個 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 對這種情況進行排序。 它從外殼運行良好。

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)

也許使用只有三行代碼的shell腳本更簡單明了:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM