首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在将列表转换为字符串时出现错误?

为什么在将列表转换为字符串时出现错误?
EN

Stack Overflow用户
提问于 2019-08-29 00:13:16
回答 1查看 33关注 0票数 1

我对Python还比较陌生,并且尝试接受命令的输出。

代码语言:javascript
复制
aws ec2 describe-images --filters Name=name,Values=Nessus*BYOL*

并得到ImageId的值。但是,当我尝试时,我会得到以下错误:

代码语言:javascript
复制
TypeError: 'int' object is not subscriptable

我试着把它转换成字符串,但我不知道这样做是否正确。我也试图对它进行调整,但这似乎也没有结果。

最后,我需要将ImageId的值赋值给一个变量,供以后使用。

这是我的密码:

代码语言:javascript
复制
def queries():
    describe_images = subprocess.call("aws ec2 describe-images --filters Name=name,Values=Nessus*BYOL*")
    str(print(describe_images["ImageId"]))

下面是运行该命令时得到的输出:

代码语言:javascript
复制
{
    "Images": [
        {
            "Architecture": "x86_64",
            "CreationDate": "2019-06-04T11:50:36.000Z",
            "ImageId": "ami-0d700172aa0395099",
            "ImageLocation": "aws-marketplace/Nessus 8.4.0 (master-193 1558031440.58) BYOL-8e783acf-0dfb-44dc-b080-415aad141bb2-ami-03eadadcd69ef2dbc.4",
            "ImageType": "machine",
            "Public": true,
            "ProductCodes": [
                {
                    "ProductCodeId": "8fn69npzmbzcs4blc4583jd0y",
                    "ProductCodeType": "marketplace"
                }
            ],
            "State": "available",
            "BlockDeviceMappings": [
                {
                    "DeviceName": "/dev/xvda",
                    "Ebs": {
                        "DeleteOnTermination": false,
                        "SnapshotId": "snap-07020d6ea4da33df4",
                        "VolumeSize": 8,
                        "VolumeType": "gp2",
                        "Encrypted": false
                    }
                }
            ],
            "EnaSupport": false,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "aws-marketplace",
            "Name": "Nessus 8.4.0 (master-193 1558031440.58) BYOL-8e783acf-0dfb-44dc-b080-415aad141bb2-ami-03eadadcd69ef2dbc.4",
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "VirtualizationType": "hvm"
        }
    ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-29 00:21:15

subprocess.call方法将返回returncode,而不是命令输出。来自文档

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None) 运行args描述的命令。等待命令完成,然后返回returncode属性。

也许你想使用.check_output()

运行带有参数的命令并返回其输出。

还要注意输出将是一个字符串。您应该首先使用json.loads()将其转换为Python字典。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57701434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档