如何在腾讯云上运用python?

  • 回答 (6)
  • 关注 (1)
  • 查看 (738)

最近python大势,那么小白想要请教如何在腾讯云上运用python呢?有没有实例呢?

我是飞仔白马我是飞仔白马提问于
隨心之所願冒泡算法工程师。回答于
推荐

Python在云计算方面有很大的优势,与c++一起在腾讯云有诸多应用。

在公有云中使用 Python 的诸多优势:

与 Linux 系统天然贴合,系统编程 API 与 glibcc 保持一致,以前的工具箱仍然适用。

是能够运行的伪代码,开发效率得到极大提升。

容易与 C/C++交互,使用 ctypes 可以很方便地调用 C 代码。

更容易保持项目的整洁。

基于这些考虑,腾讯云开始慢慢尝试引入 Python。首先就是改造接入层,使用 Flask + uWSGI + Nginx 改造了旧的 CGI 接口,使得开发工作更加简单,接口更加现代化。

另外,腾讯云还将 Python 用于系统编程,开发了公有云上的宿主机包管理工具。据说这个工具上线几年来运行都没有出什么问题。一般开发者很少有将 Python 用于系统编程的,腾讯云之所以选择 Python,是由于其标准库与 POSIX 规范天然贴合,具备优秀的文本处理和分析能力,而且还有完备的网络功能等原因。

叶叶程序猿,码农回答于

实例有很多呀,比如下面这个。社区都能找得到。

Python实现腾讯云CDB备份文件自动上传到COS

一、背景

  • 需求:目前遇到的客户需求为将腾讯云CDB备份文件自动上传到腾讯云COS内,再次抛砖引玉,还有很多类似的需求均可以采用此类方法解决,线下IDC数据文件备份至云端COS内,或根据文件下载地址url将文件上传至COS内。
  • 思路:首先获取到CDB的备份下载url,通过COS的API上传文件,大佬如有更好的方法欢迎一块讨论。

二、技术细节

  • COS:COS有API同时有SDK,这就很方便我们来通过Python对COS进行各类操作,COS SDK for Python
  • CDB:CDB有API但是CDB的查询备份下载没有对应的SDK,此时只能通过API来进行获取,腾讯云API的签名很复杂,要进行:构造参数字典->对dict排序->拼接sign->对sign编码->拼接完成最终url->完成调用,签名方法查询备份API
  • requirements:cos-python-sdk-v5==1.5.2 requests==2.19.1 tencentcloud-sdk-python==3.0.15 urllib3==1.23
  • 文件目录结构

三、代码

github地址

3.1 配置文件

# auth:kaliarch
# func:将腾讯云cdb备份文件上传至cos制定的bucket内
# python version:python3+
# cos version:v5
# https://console.cloud.tencent.com/cos5/bucket

# 腾讯云公共信息配置段
[common]
# 腾讯云 secretid
secret_id = AKIDMdjegcmoGxxxxxxxxxxxxxxxxxxxx
# 腾讯云 secretkey
secret_key = d5MRL4VoxyvlQvxxxxxxxxxxxxxx

# 腾讯云cos信息配置段
[cosinfo]
# cos所在地域
cos_region = ap-chengdu

# 腾讯云bucket名字(cos v5 bucket名称组成:bucket+appid)
bucket_name = xuel-test-bucket-125396xxxx

# 腾讯云cdb信息配置段
[cdbinfo]
# cdb实例id
cdb_instanceid = cdb-rqaxxxxx

# cdb所在地域
cdb_region = ap-shanghai

# cdb 日志备份类型,coldbackup(冷备),binlog(二进制日志)和slowlog_day(慢查询日志)
cdb_bak_type = coldbackup

# 日志文件信息配置段
[loginfo]
#日志文件目录名称
logdir_name = rds_to_cos
#日志文件名称
logfile_name = rdsbak_to_cos.log

3.2 CDB API核心操作代码

#构建字典
keydict = {
		'Action': self.cdb_action,
		'Timestamp': str(int(time.time())),
		'Nonce': str(int(random.random() * 1000)),
		'Region': self.cdb_region,
		'SecretId': self.secret_id,
		# 'SignatureMethod': SignatureMethod,
		'cdbInstanceId': self.cdb_instanceid,
		'type': self.cdb_bak_type
}
#字典排序
sorted(zip(keydict.keys(), keydict.values()))
#字符串拼接
sign_str_init = ''
for value in sortlist:
		sign_str_init += value[0] + '=' + value[1] + '&'
sign_str = 'GET' + self.cdb_api_url + sign_str_init[:-1]
return sign_str, sign_str_init
#获取签名串并编码
secretkey = self.secret_key
signature = bytes(sign_str, encoding='utf-8')
secretkey = bytes(secretkey, encoding='utf-8')
my_sign = hmac.new(secretkey, signature, hashlib.sha1).digest()
my_sign = base64.b64encode(my_sign)
parse.quote(my_sign)
#获取最终url
result_url = 'https://' + self.cdb_api_url + sign_str + '&Signature=' + result_sign

单独运行此模块可以得到以下信息:

3.3 COS SDK核心操作代码

#根据文件大小自动选择简单上传或分块上传,分块上传具备断点续传功能
with open(filename, 'wb') as localfile:
		localfile.write(requests.request('get', url).content)
# 进行上传
response = cos_client.upload_file(
		Bucket=self.bucket_name,
		LocalFilePath=filename,
		Key=filename,
		PartSize=partsize,
		MAXThread=maxthread
)
# 删除本地文件
if os.path.exists(filename):
		os.remove(filename)

3.4 日志记录核心代码

#创建目录
def create_dir(self):
		_LOGDIR = os.path.join(os.path.dirname(__file__), self.logdir_name)
		_TIME = time.strftime('%Y-%m-%d', time.gmtime()) + '-'
		_LOGNAME = _TIME + self.logfile_name
		LOGFILENAME = os.path.join(_LOGDIR, _LOGNAME)
		if not os.path.exists(_LOGDIR):
				os.mkdir(_LOGDIR)
		return LOGFILENAME
#定义日志文件
def create_logger(self, logfilename):
		logger = logging.getLogger()
		logger.setLevel(logging.INFO)
		handler = logging.FileHandler(logfilename)
		handler.setLevel(logging.INFO)
		formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
		handler.setFormatter(formater)
		logger.addHandler(handler)
		return logger

四、测试结果

获取CDB下载链接

完成上传查看COS文件

五、总结

  • 优化:可以后期通过配合定时任务完成自动化任务
  • 扩展:源端:不仅仅局限于CDB备份文件,对于随便下载url,均可以上传到COS内。终端:终端也不仅局限于腾讯云COS。
仁传联腾讯云第#393号用户回答于

腾讯云服务器搭建Python环境

第一步:购买以及简单配置

打开腾讯首页进行注册:https://www.qcloud.com/ 如何注册这里就不说了。注册完了之后可以在这里https://console.qcloud.com/developer 进行实名认证,实名认证比较简单只需要用微信或者QQ支付0.01元,实名认证完在https://www.qcloud.com/act/newuser 按照你自己的情况领取优惠券。

注册领券完了之后,购买相应配置的云服务器。我这里按照一个爬虫需求的最低要求的配置去演示。

1、首先打开:https://buy.qcloud.com/cvm

1.1:选择地域与机型,这里需要注意点是:地域选择离你比较近的地方,可以有效的降低访问延时、提高下载速度。

1.2:选择镜像

靠谱到有百分之八十左右的人用的是windows系统,于是我这里是用windows做的演示,当然,你也可以选择其他你熟悉的操作系统。

1.3选择存储与网络

选择配置你需要的数据盘、带宽的大小、服务器数量、购买市场等,如果没有特殊需求,此处可以默认选择,直接点击下一步。

1.4设置相关信息

最后一步就是设置云服务器相关的信息了,包括设置密码、新建安全组。注意:必须新建安全组之后才可以点击完成。

最后一步付款的时候,可以使用第一步领取的优惠券,如果你使用的是最低配置的服务器,使用优惠券之后只需要35元/月

第二步:登陆云服务器

经过第一步,你已经购置好了云服务器了,在https://console.qcloud.com/cvm 将会看到你的云服务器状态,刚创建好的云服务器无法立马使用,需要等待分配时间在5-10分钟左右。

点击右边的登陆会跳出登陆界面了,输入在第一步中输入设置的用户名以及密码就可以成功登陆服务器。

网页上进行服务器操作比较麻烦,如果自己电脑是windows系统,可以搜索本机的远程桌面连接,使用远程桌面连接连接云服务器。

其中的计算机名,就是你自己云服务器的公网IP

第三步:下载搭建Python环境

之前搭建过Python环境的这一步可以直接跳过了,没有搭建过的请继续往下看。 在云服务器上访问:https://www.python.org/ftp/python/3.6.0/python-3.6.0-amd64.exe,直接下载Python3.6,如果你不习惯使用Python3.x,你也可以在Python首页下载你需要的版本。下载好之后运行,会出现以下界面。

注意:界面下方的Add Python 3.6 to PATH一定要勾选上,勾选之后,选择Install Now。

点击下一步,如果出现Success,则安装成功。

使用终端,打开终端输入python,如果出现以上界面不报错则云服务器Python环境至此搭建成功。

okchina软件工程硕士 Java攻城狮回答于

python是一门优秀的综合语言,python的宗旨是简明,优雅,强大,在人工智能,云计算,金融分析,大数据开发,web开发,自动化运维,测试等方向应用广泛,已是全球第4大最流行的语言

目前python主要应用领域:

  web开发--最火的python web框架Django,支持异步高并发的Tornado框架,短小精悍的flask,bottle.

Django官方的标语吧Django定义为the framework for perfectionist with deadlines(大意是一个为完全主义者开发的高效率web框架)

  网络编程--支持高并发的Twisted网络框架,py3引入了asyncio使异步编程变得非常简单

  爬虫--爬虫领域,Python几乎是霸主地位,Scrapy\Request\Beautifusoap\urllib等,想爬啥就爬啥

  云计算--目前最火最知名的云计算框架就是openstack,Python现在的火,很大一部分就是因为云计算

  人工智能--谁会成为AI和大数据时代的第一开发语言?这本已是一个不需要争议的问题,Python作为AI时代头牌语言的位置基本确立

  自动化运维--每个Linux运维人员都必须要掌握的语言

  金融分析--Python是金融分析,量化交易领域里用的最多的语言

  科学运算--NASA就在大量使用python在进行各种复杂的科学运算,随着Numpy,Scipy,Matplotlib等众多程序的开发,使的python越来越适合于做学科计算,绘制高质量的2D和3D图像

  游戏开发--在网络游戏开发中Python也有很多应用,相比Lua or C++,Python比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑

腾讯云centos服务器上就可以安装python3.6呀,可以自主购买或者试用,实例的话主要用于云计算方面吧。

镜花破晓筑高墙,广积粮,缓称王。回答于

用Python使用腾讯云API(cvm实例)

腾讯云为我们提供了很多服务或者功能的API,通过用Python使用腾讯云API(cvm实例)API我们可以快速定制自己的管理空间/后台,同时,也可以自定义维护方法。

腾讯云API地址:https://cloud.tencent.com/document/api

模块/业务名:CVM

Action:DescribeInstances

实现语言:Python 3

代码:

# -*- coding: utf-8 -*-

# 作者:Dfounderliu(刘宇)
# 程序功能:腾讯云API DEMO

# 说明,在70,71行修改自己的secretId与secretKey
# 可以在https://console.cloud.tencent.com/capi 获取

# 运行结果:
#  "Response": {
#         "TotalCount": *,
#         "InstanceSet": [
#             {
#                ******
#          ],
#          "RequestId": "***********"
#    }
#}

import binascii
import hashlib
import hmac
import sys
import urllib.parse
import urllib.request
import time
import random

def sign(secretKey, signStr, signMethod):
    '''
    该方法主要是实现腾讯云的签名功能
    :param secretKey: 用户的secretKey
    :param signStr: 传递进来字符串,加密时需要使用
    :param signMethod: 加密方法
    :return:
    '''
    if sys.version_info[0] > 2:
        signStr = signStr.encode("utf-8")
        secretKey = secretKey.encode("utf-8")

    # 根据参数中的signMethod来选择加密方式
    if signMethod == 'HmacSHA256':
        digestmod = hashlib.sha256
    elif signMethod == 'HmacSHA1':
        digestmod = hashlib.sha1

    # 完成加密,生成加密后的数据
    hashed = hmac.new(secretKey, signStr, digestmod)
    base64 = binascii.b2a_base64(hashed.digest())[:-1]

    if sys.version_info[0] > 2:
        base64 = base64.decode()

    return base64

def dictToStr(dictData):
    '''
    本方法主要是将Dict转为List并且拼接成字符串
    :param dictData:
    :return: 拼接好的字符串
    '''
    tempList = []
    for eveKey, eveValue in dictData.items():
        tempList.append(str(eveKey) + "=" + str(eveValue))
    return "&".join(tempList)


# 用户必须准备好的secretId和secretKey
# 可以在 https://console.cloud.tencent.com/capi 获取
secretId = "你的secretId"
secretKey = "你的secretKey"

# 在此处定义一些必须的内容
timeData = str(int(time.time())) # 时间戳
nonceData = int(random.random()*10000) # Nonce,官网给的信息:随机正整数,与 Timestamp 联合起来, 用于防止重放攻击
actionData = "DescribeInstances" # Action一般是操作名称
uriData = "cvm.tencentcloudapi.com" # uri,请参考官网
signMethod="HmacSHA256" # 加密方法
requestMethod = "GET" # 请求方法,在签名时会遇到,如果签名时使用的是GET,那么在请求时也请使用GET
regionData = "ap-hongkong" # 区域选择
versionData = '2017-03-12' # 版本选择

# 签名时需要的字典
# 首先对所有请求参数按参数名做字典序升序排列,所谓字典序升序排列,
# 直观上就如同在字典中排列单词一样排序,按照字母表或数字表里递增
# 顺序的排列次序,即先考虑第一个“字母”,在相同的情况下考虑第二
# 个“字母”,依此类推。
signDictData = {
    'Action' : actionData,
    'Nonce' : nonceData,
    'Region' : regionData,
    'SecretId' : secretId,
    'SignatureMethod':signMethod,
    'Timestamp' : int(timeData),
    'Version':versionData ,
}

# 获得拼接的字符串,用于签名
# 此步骤生成请求字符串。 将把上一步排序好的请求参数格式化成“参数名称”=“参数值”的形式,如对Action参数,
# 其参数名称为"Action",参数值为"DescribeInstances",因此格式化后就为Action=DescribeInstances。
# 注意:“参数值”为原始值而非url编码后的值。
# 然后将格式化后的各个参数用"&"拼接在一起,最终生成请求字符串。
# 此步骤生成签名原文字符串。 签名原文字符串由以下几个参数构成:
# 1) 请求方法: 支持 POST 和 GET 方式,这里使用 GET 请求,注意方法为全大写。
# 2) 请求主机:查看实例列表(DescribeInstances)的请求域名为:cvm.tencentcloudapi.com。实际的请求域名根据接口所属模块的不同而不同,详见各接口说明。
# 3) 请求路径: 当前版本云API的请求路径固定为 / 。 4) 请求字符串: 即上一步生成的请求字符串。
# 签名原文串的拼接规则为:
#   请求方法 + 请求主机 +请求路径 + ? + 请求字符串
requestStr = "%s%s%s%s%s"%(requestMethod,uriData,"/","?",dictToStr(signDictData))

# 调用签名方法,同时将结果进行url编码,官方文档描述如下:
# 生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。 注意:如果用户的请求方法是GET,则对所有请求参
# 数值均需要做URL编码。 如上一步生成的签名串为 EliP9YW3pW28FpsEdkXt/+WcGeI= ,最终得到的签名串请求参数(Signature)
# 为: EliP9YW3pW28FpsEdkXt%2f%2bWcGeI%3d ,它将用于生成最终的请求URL。
signData = urllib.parse.quote(sign(secretKey,requestStr,signMethod))

# 上述操作是实现签名,下面即进行请求
# 先建立请求参数, 此处参数只在签名时多了一个Signature
actionArgs = signDictData
actionArgs["Signature"] = signData

# 根据uri构建请求的url
requestUrl = "https://%s/?"%(uriData)
# 将请求的url和参数进行拼接
requestUrlWithArgs = requestUrl + dictToStr(actionArgs)

# 获得response
responseData = urllib.request.urlopen(requestUrlWithArgs).read().decode("utf-8")

print(responseData)

# 获得到的结果形式:
#  "Response": {
#         "TotalCount": *,
#         "InstanceSet": [
#             {
#                ******
#          ],
#          "RequestId": "***********"
#    }
#}
我要飞别拦我码农回答于

python作为上升主流编程语言已经融入云计算中了。

扫码关注云+社区

领取腾讯云代金券