gpt4 book ai didi

python - 当 AWS-CLI 在 Python 中作为子进程运行时未指定 AWS 同步参数

转载 作者:行者123 更新时间:2023-12-02 17:12:28 24 4
gpt4 key购买 nike

我有一个 AWS S3 存储桶,里面装满了按日期参数化的数据。我想使用 AWS CLI ( reference ) 一次提取一个日期的数据,特别是 aws s3 sync 命令。

下面的命令做了我期望它做的事情:

aws s3 同步 s3://my-bucket-1 。 --exclude "*"--include "*2018-01-17*"--dryrun

从我的命令行运行此命令会为存储桶中包含子字符串 2018-01-17 的每个文件生成一个(dryrun) 下载

太棒了!为了简化必要的文件操作,我围绕这个执行程序编写了一个小的 CLI 包装器。这个包装器是用 Python 编写的,并使用 subprocess.run 工具来完成它的工作。整个操作归结为以下调用:

subprocess.run(['aws', 's3', 'sync', 's3://my-bucket-1', '.', '--exclude', '"*"', '--include', '"*2018-01-17*"', '--dryrun'])

问题是,当我运行此语句时,我会为存储桶中的每个 文件返回一个(dryrun) 下载。即,返回与 01-18、01-19 等存储桶条目对应的数据。 --exclude/--include 规则无法应用,结果与我只是运行 aws s3 sync s3://my -bucket-1 .

为什么会这样?

最佳答案

使用列表形式调用时,不应使用那些额外的双引号。通常,当您的命令作为单个字符串给出时,引号可以标识双引号之间的内容都是单个参数的一部分。

如果您在列表项中使用双引号,则应该理解它应该被解析为按字面意义将引号作为参数传递,因此它会转义您的引号并按字面意义传递它。因此,没有任何内容与您的 includeexclude 参数匹配,因为参数包含文字 "

因此,以下应该是更正后的参数。

subprocess.run(['aws', 's3', 'sync', 's3://my-bucket-1', '.', '--exclude', '*', '--include', '*2018-01-17*', '--dryrun'])

关于python - 当 AWS-CLI 在 Python 中作为子进程运行时未指定 AWS 同步参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48358992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com