2017-01-29 12 views
0

Попытка изменить размер (только ширину) некоторых изображений с помощью сценария Python. Это скрипт Python:Команда Sips в скрипте Python не работает - «Ошибка 4: файл не указан» и «Недействительный файл - пропущен»

# -*- 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']) 

может быть заменен носителем вызова питона:

os.makedirs(directory_out) 
+0

Большое спасибо, Жан-Франсуа. –

+0

вы можете принять ответ тогда. –