Можно ли перенаправить файл, загруженный с помощью Subprocess.popen, в другой каталог? - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь настроить функцию AWS Lambda, которая выполняет вызов API с использованием файла jar с использованием python.

Код показан ниже:

command_line = ('java -jar Reporter.jar p=Reporter.properties Sales.getReport' + " " + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ", " + arg5 + ", " + arg6)
args = shlex.split(command_line)
print(args)
p = subprocess.Popen(args)
p.wait()

Этот файл (текстовый файл, сжатый в формате gzip) загружается в тот же каталог, в котором находится файл jar и файл свойств на моем локальном компьютере. На AWS Lambda этот фрагмент кода выполняется успешно, но выдает ошибку:

Невозможно сохранить файл. Убедитесь, что у вас достаточно места и есть доступ для записи в текущий каталог.

Это потому, что AWS Lambda не предоставляет доступ для загрузки файлов нигде, кроме папки /tmp?

Какие изменения можно внести в код, чтобы загрузить файл в папку AWS Lambda /tmp вместо папки, содержащей файл jar?

Я уже пытался изменить каталог с помощью os.chdir на каталог, содержащий файл jar, и вернуться в родительский каталог после обработки команды подпроцесса, но он загружает файл в тот же каталог, что и тот, который содержит файл. фляга

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Самое простое решение - изменить инструмент jar для принятия пути вывода. Если это невозможно,

  1. Скопируйте файл jar в / tmp / (или укажите абсолютный путь, если это возможно)
  2. В скрипте Python используйте os.chdir, чтобы изменить рабочий каталогв / tmp / перед вызовом Popen ИЛИ вы можете использовать параметр cwd в Popen для запуска команды в / tmp
0 голосов
/ 05 ноября 2019

Я сделал то же самое с файлами json и xlsx.

import uuid
data = {}
file_name = "test"
download_json_path = '/tmp/{}{}'.format(uuid.uuid4(), file_name))
with open(download_json_path, 'w') as json_file:
    json_file.write(json.dumps({'data': data}, indent=4, sort_keys=True))

Также вы можете копировать файлы в S3, используя boto3 s3 resource

...