Есть ли причина, по которой моя строка изменяется при использовании subprocess.check_output? - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужно, чтобы строка была помещена в переменную, чтобы она выглядела точно следующим образом:

'{"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 Ответ

0 голосов
/ 12 апреля 2019

заставил его работать, выполнив следующие действия:

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

edit:

json.dumps() здесь важно, потому чтобез него объект визуализируется с ' s вокруг клавиш, и AWS CLI это не нравится.

...