我对Python还比较陌生,并且尝试接受命令的输出。
aws ec2 describe-images --filters Name=name,Values=Nessus*BYOL*并得到ImageId的值。但是,当我尝试时,我会得到以下错误:
TypeError: 'int' object is not subscriptable我试着把它转换成字符串,但我不知道这样做是否正确。我也试图对它进行调整,但这似乎也没有结果。
最后,我需要将ImageId的值赋值给一个变量,供以后使用。
这是我的密码:
def queries():
describe_images = subprocess.call("aws ec2 describe-images --filters Name=name,Values=Nessus*BYOL*")
str(print(describe_images["ImageId"]))下面是运行该命令时得到的输出:
{
"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"
}
]
}发布于 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字典。
https://stackoverflow.com/questions/57701434
复制相似问题