Команда Sips в скрипте Python не работает - "Ошибка 4: файл не указан" и "Недопустимый файл - пропуск"

Попытка изменить размер (только ширину) некоторых изображений с помощью скрипта Python. Это скрипт Python:

# -*- coding: utf-8 -*-

import subprocess
import os


# New width
new_width = '200'

# Create for converted images
create_directory_out = subprocess.run(['mkdir', '-p', './Result'])

# Directory with started images
directory_source = 'Source'

#  Directory with converted images
directory_out = 'Result'

# get list of started images to variable files
files = os.listdir(directory_source)

# Filtre by mask .jpg to variable images
images = filter(lambda x: x.endswith('.jpg'), files)

img_list = list(images)

# Loop of convert images by sips
for file_name in img_list:
    print(file_name)
    subprocess.run(['sips', '--resampleWidth', 'new_width', '--out', './directory_out/file_name', './directory_source/file_name', ])

Я получаю ошибку:

face-04.jpg
Warning: ./directory_source/file_name not a valid file - skipping
Error 4: no file was specified
Try 'sips --help' for help using this tool
face-04.jpg

Но команда sips в Терминале работает:

sips --resampleWidth 200 --out ./Result/face-04.jpg ./Source/face-04.jpg 

Что еще может пойти не так?

Заранее спасибо за помощь.

1 ответ

Решение

Вы смешиваете литералы с переменными:

subprocess.run(['sips', '--resampleWidth', 'new_width', '--out', './directory_out/file_name', './directory_source/file_name', ])

пытается получить доступ './directory_out/file_name' в прямом смысле!

вам нужно на самом деле использовать свои переменные и join имена каталогов и файлов:

subprocess.run(['sips', '--resampleWidth', 'new_width', '--out', os.path.join(directory_out,file_name), os.path.join(directory_source,file_name)])

В сторону:

create_directory_out = subprocess.run(['mkdir', '-p', './Result'])

может быть заменено собственным вызовом Python:

os.makedirs(directory_out)
Другие вопросы по тегам