使用subprocess.check_output时,我的字符串是否有原因?

问题描述 投票:0回答:1

我需要将字符串放在变量中,看起来完全像这样:

'{"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满意?

python string amazon-web-services subprocess
1个回答
0
投票

通过执行以下操作使其工作:

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 CLI保持高兴,因为满足了这些条件:

  • JSON对象中的每个键都被"s包围
  • 命令中的整个JSON对象被's包围

编辑:

json.dumps()在这里非常重要,因为没有它,对象将围绕密钥呈现's,AWS CLI不喜欢这样。

© www.soinside.com 2019 - 2024. All rights reserved.