使用python sdk批量提取阿里雲例項資訊

2021-10-23 13:31:26 字數 3330 閱讀 7318

編寫python指令碼呼叫阿里雲sdk批量提取阿里雲某region(如杭州)全部執行中例項的基本資訊並生成**。

# author lizhejie

import json

import csv

from aliyunsdkcore.client import acsclient

from aliyunsdkcore.acs_exception.exceptions import clientexception

from aliyunsdkcore.acs_exception.exceptions import serverexception

from aliyunsdkecs.request.v20140526.describeinstancesrequest import describeinstancesrequest

def get_page():

response = client.do_action_with_exception(request)

resj = json.loads(response, encoding='utf-8')

total_count = resj['totalcount']

total_page, rem = divmod(resj['totalcount'], 50)

if rem:

total_page = total_page + 1

return total_page

def desinstances(total_page):

count = 1

# 使用字典格式來收集最後例項的資訊

total_dict = {}

for page in range(1, total_page+1):

request.set_pagenumber(page)

# 設定set_pagesize(50)中的數字必須大於等於get_page()中divmod方法中第二個引數值,否則無法顯示所有的例項資訊

request.set_pagesize(50)

# 選擇狀態為執行中的例項

request.set_status("running")

# 或得請求結果

response = client.do_action_with_exception(request)

# 結果解析為json格式

resj = json.loads(response, encoding='utf-8')

# 獲得所有例項的所有資訊

instances = resj['instances']['instance']

# 遍歷每一頁的例項資訊

for item in instances:

# print(item)

# print(count, end=':')

# print(item['instanceid'], end=' ')

# print(item['publicipaddress']['ipaddress'], end=' ')

# if item['inneripaddress']['ipaddress']:

# print(item['inneripaddress']['ipaddress'], end=' ')

# else:

# print(item['vpcattributes']['privateipaddress']['ipaddress'][0], end=' ')

# print(item['hostname'], item['instancetypefamily'], item['cpu'], item['memory'] // 1024)

insid = item['instanceid']

if item['publicipaddress']['ipaddress']:

puip = item['publicipaddress']['ipaddress'][0]

else:

puip = ''

if item['inneripaddress']['ipaddress']:

inip = item['inneripaddress']['ipaddress'][0]

else:

inip = item['vpcattributes']['privateipaddress']['ipaddress'][0]

hostname = item['hostname']

instype = item['instancetypefamily']

vcpu = item['cpu']

mem = item['memory'] // 1024

insinfolist = [insid, puip, inip, hostname, instype, vcpu, mem]

total_dict[count] = insinfolist

count += 1

return total_dict

if __name__ == '__main__':

accesskeyid = input("請輸入accesskeyid: ")

accesssecret = input("請輸入accesssecret: ")

region = input("請輸入region: ")

client = acsclient(accesskeyid, accesssecret, region)

# 構造請求,請求的引數在每個函式中指定

request = describeinstancesrequest()

request.set_accept_format('json')

# 獲得總頁數

totalpage = get_page()

# 獲得所有例項的相關資訊

totaldict = desinstances(totalpage)

# print(type(totaldict))

# print(totaldict)

with open("instanceinform.csv", 'w', newline="") as f:

headrow = ['例項id', '公網ip', '私網ip', '主機名', '例項規格', 'cpu核數', '物理記憶體(g)']

write = csv.writer(f)

write.writerow(headrow)

for key in totaldict:

row = totaldict[key]

write = csv.writer(f)

write.writerow(row)

print("寫入完畢!")

阿里雲服務python SDK的使用

阿里雲大多數服務都提供成熟的python sdk,方便我們快速呼叫,下面是我自己使用負載均衡slb的呼叫過程 coding utf8 from aliyunsdkcore.client import acsclient from aliyunsdkcore.acs exception.excepti...

python提取內容 使用Python提取小說內容

具體實現功能如下 輸入 目錄頁的url之後,指令碼會自動分析目錄頁,提取 的章節名和章節鏈結位址。然後再從章節鏈結位址逐個提取章節內容。現階段只是將 從第一章開始,每次提取一章內容,回車之後提取下一章內容。其他 的結果可能有不同,需要做一定修改。在逐浪測試過正常。coding utf8 usr bi...

批量提取檔名的辦法

批量提取檔名的辦法 方法一 tree命令 命令提示符下 開始 執行 cmd tree 要獲得檔名的資料夾的路徑 f 存放的路徑 filename 例如 要獲得c盤下的所有檔案的檔名,並將生成的檔案儲存到d盤,可使用如下命令 tree c f d contents.txt 代表乙個空格 小tip 可以...