Я пытаюсь запустить exiftool для чтения метаданных изображения в скрипте python, как часть лямбда-функции в AWS.
В экземпляре ec2, выполняющем amazon linux, - это то, что среда выполнения python3.6 использует , я могу загрузить инструмент, извлечь его и легко запустить.Тем не менее, попытка сделать это с помощью моего Python-скрипта в лямбда-функции не работает.
Моя лямбда-функция выглядит следующим образом:
import imageio
import subprocess
import utils
import os
import stat
import boto3
s3_client = boto3.client('s3')
# get exif tool
s3_client.download_file(
'zipped.code',
'Image-ExifTool-11.53.tar.gz',
'/tmp/Image-ExifTool-11.53.tar.gz')
p = subprocess.run('tar -zxvf Image-ExifTool-11.53.tar.gz', cwd='/tmp', shell=True)
def get_meta_data(im):
p = subprocess.Popen(
'/tmp/Image-ExifTool-11.53/exiftool -',
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
out, err = p.communicate(input=imageio.imwrite('<bytes>', im, format='jpg'))
print(out) # b''
print(err) # b'/bin/sh: /tmp/Image-ExifTool-11.53/exiftool: /usr/bin/perl: bad interpreter: No such file or directory\n'
def lambda_handler(event, context):
src_key = event['src_key']
image = utils.download_image_to_memory(src_key)
print(get_meta_data(image))
Я запускал этот код локально, и он работает.Если я печатаю содержимое /usr/bin
в лямбда-функции с помощью print(os.listdit('/usr/bin'))
, то там нет исполняемого файла perl
.Однако в каталоге /usr/bin
на экземпляре ec2 с amazon linux есть исполняемый файл perl
.
Я подозреваю, что проблема заключается в моем отсутствии perl (инструмент написан на perl), но почему это так?нет интерпретатора perl, учитывая, что лямбды должны работать с образом amazon linux?