我需要将字符串放置在变量中,以使准确像这样:
'{"S3Object":{"Bucket":"<bucketname>","Name":"<docname>","Version":"<version>"}}'
'
必须与以后使用字符串时的位置完全相同。
所以,我这样定义
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满意?
答案 0 :(得分: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.dumps()
在这里很重要,因为没有它,对象将在键周围使用'
来呈现,而AWS CLI则不喜欢。