#python #string #amazon-web-services #subprocess
#python #строка #amazon-web-services #подпроцесс
Вопрос:
Мне нужно, чтобы строка помещалась внутри переменной, чтобы она выглядела точно так:
'{"S3Object":{"Bucket":"<bucketname>","Name":"<docname>","Version":"<version>"}}'
'
s должны быть именно там, где они есть, когда строка будет использоваться позже.
итак, я определяю это так
aws_object = """'{"S3Object":{"Bucket":"%s","Name":"%s","Version":"1"}}'""" % (AWS_BUCKET, AWS_DOCUMENT_NAME)
это единственный метод, который я нашел, который позволит размещать переменные внутри строки, имея возможность использовать '
и "
по мере необходимости. вывод переменной в консоль приводит к тому, что строка выглядит идеально.
однако aws_object
последующее использование приводит к тому, что строка выглядит как
'{"S3Object":{"Bucket":"testing-bucket","Name":"contract.pdf","Version":"1"}}'']'
в консоли, когда используется subprocess.check_output
примерно так:
job_id = subprocess.check_output(["aws textract start-document-text-detection --document '{}'".format(aws_object)], shell=True)
итак, там есть несколько дополнительных символов, возможно, из-за использования """
в aws_object
или что-то в этом роде.
возвращаемая ошибка гласит Unable to get object metadata from S3.
, что переданный объект start-document-text-detection
неправильно отформатирован.
как я могу добиться желаемого форматирования строки, чтобы сделать AWS CLI счастливым?
Комментарии:
1. Вы имеете в виду, что вы просто хотите сериализовать данные в JSON с помощью чего-то вроде
json.dumps()
?2. @roganjosh даже не подумал об этом. попробую
3. Вы обошли все дома и сделали все намного сложнее для себя здесь
4. @roganjosh не намеренно.
5. Очевидно, что нет 🙂
Ответ №1:
заставил его работать, выполнив следующее:
aws_object = {"S3Object":{"Bucket":AWS_BUCKET,"Name":AWS_DOCUMENT_NAME,"Version":"1"}}
aws_object = json.dumps(aws_object)
...
try:
job_id = subprocess.check_output(["aws textract start-document-text-detection --document '{}'".format(aws_object)], shell=True)
except subprocess.CalledProcessError as e:
print(e)
это обеспечило удовлетворенность командной строки AWS, поскольку эти условия были выполнены:
- каждый ключ в объекте JSON был окружен
"
символом s - весь объект JSON в команде был окружен
'
символом s
Редактировать:
здесь json.dumps()
важно, потому что без этого объект отображается с '
помощью s вокруг ключей, а AWS CLI это не нравится.