【问题标题】:Running AWS CLI through Python returns a "sh: 1: aws: not found" error通过 Python 运行 AWS CLI 会返回“sh: 1: aws: not found”错误
【发布时间】:2015-07-18 01:17:16
【问题描述】:

我正在尝试使用 Python 将文件复制到 S3 存储桶中,如下所示:

cmd = 'aws s3 %s %s' % (filename, bucketname)
os.system(cmd)

它给了我一个sh: 1: aws: not found 错误。

但是,使用 s3cmd 就可以了。

为什么s3cmd 可以工作,而aws 不行?

另外,我做了which aws,它返回:/home/username/anaconda/bin/aws

which s3cmd 返回:/home/username/anaconda/bin/s3cmd

为什么一个可以工作,而另一个却不能,尽管有相同的根?

【问题讨论】:

  • 尝试使用完整路径。
  • @jonnybazookatone:我会试试的。但为什么一个工作,而不是另一个?我的 bashrc 也有正确的路径..
  • 我不确定,应该没关系。但如果这不起作用会很有趣,因为它会暗示一些与路径无关的其他潜在问题。
  • @jonnybazookatone:会的。当我尝试并看看会发生什么时,我会更新这个问题。谢谢!
  • @jonnybazookatone:它确实有效,但我仍然对它为什么有效感到困惑!

标签: python amazon-web-services amazon-s3 aws-cli s3cmd


【解决方案1】:

这是因为您的系统中没有安装 AWSCLI。我也遇到了同样的问题,我尝试使用pip install --user awscli 使用 pip 包管理器安装它,但它没有用。所以我直接在系统中安装如下:

curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

错误已解决。

【讨论】:

    【解决方案2】:

    解决问题的一种快速方法是尝试操作系统调用的完整路径,看看是否是 PATH 问题:

    cmd = '/path/to/aws s3 %s %s' % (filename, bucketname)
    os.system(cmd)
    

    这个问题可能有几个原因,很可能与 PATH 变量有关(初步猜测)。但是,最好避开 os.system,如文档 (https://docs.python.org/2/library/os.html#os.system) 中所述,并使用一些替代方法。

    使用子进程:

    cmd = ['/path/to/aws', 's3', filename, bucketname]
    subprocess.Popen(cmd)
    

    或者只使用 python AWS 客户端 boto3 包。有很多方法,但是这个 SO 问题 (How to save S3 object to a file using boto3) 中的一个简单示例:

    import boto3
    s3_client = boto3.client('s3')
    s3_client.upload_file(filename, bucketname, filename)
    

    那个不能用 moto 测试,这可能很烦人。相反,如果你想测试,你可以这样做:

    import boto3
    s3_resource = boto3.resource('s3')
    
    with open(filename, 'rb') as f:
        binary = f.read()
    
    s3_resource.Bucket(bucketname).put_object(
        Key=filename,
        Body=binary
    )
    

    【讨论】:

      【解决方案3】:

      直接从 zip 安装:https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html#cliv2-linux-install

      curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
      unzip awscliv2.zip
      sudo ./aws/install
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-14
        • 2015-12-18
        • 2020-05-09
        • 2015-11-28
        • 2018-06-06
        • 2019-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多