
# 开发一个Python脚本
本章节介绍如何在数据开发模块上开发一个Python脚本示例。
#### 环境准备
- 已开通弹性云服务器，并创建ECS，ECS主机名为"ecs-dgc"。
  ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
  本示例主机选择"CentOS 8.0 64bit with ARM(40GB)"的公共镜像，并且使用ECS自带的Python环境，您可登录主机后使用python命令确认服务器的Python环境。
  ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001487966394.png "点击放大")
  
- 已开通数据集成增量包，CDM集群名为"cdm-dlfpython"，提供数据开发模块与ECS主机通信的代理。
- 请确保ECS主机与CDM集群网络互通，互通需满足如下条件：
  - CDM集群与ECS主机同区域情况下，同虚拟私有云、同子网、同安全组的不同实例默认网络互通；如果同虚拟私有云但是子网或安全组不同，还需配置路由规则及安全组规则，配置路由规则请参见[如何配置路由规则](https://support.huaweicloud.com/bestpractice-vpc/bestpractice_0009.html#bestpractice_0009__zh-cn_topic_0252060877_li16617547103419)章节，配置安全组规则请参见[如何配置安全组规则](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0140323152.html)章节。
  
  - CDM集群与ECS主机处于不同区域的情况下，需要通过公网或者专线打通网络。通过公网互通时，需确保CDM集群已绑定EIP，数据源所在的主机可以访问公网且防火墙规则已开放连接端口。
  
  - 此外，您还必须确保该ECS主机与CDM集群所属的企业项目必须相同，如果不同，需要修改工作空间的企业项目。
   
 
#### 约束限制
- Python节点支持脚本参数和作业参数。
- 本示例以Python3为例。
- Python注释不能以"#{"开头，与数据开发内置的EL表达式用法冲突。
 
#### 建立主机数据连接
开发Python脚本前，我们需要建立一个到弹性云服务器ECS的连接。
1. [登录DataArts Studio管理控制台](https://console.huaweicloud.com/dayu/)。
   
   详情请参考[访问DataArts Studio实例控制台](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0001.html)。
   
   
2. 在DataArts Studio控制台首页，选择对应工作空间的"管理中心"模块，进入管理中心页面。
3. 在管理中心页面，单击"数据连接"，进入数据连接页面并单击"创建数据连接"。
4. 参见[表1]配置相关参数，创建主机连接名称为"ecs"的数据连接，如[图1]所示。
   
    表1主机连接 
   | 参数      | 是否必选 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   |:---|:---|:---|
   | 数据连接类型  | 是    | 主机连接固定选择为主机连接。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 数据连接名称  | 是    | 数据连接的名称，只能包含字母、数字、下划线和中划线，且长度不超过100个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 描述      | 否    | 为更好地识别数据连接，此处加以描述信息，长度不能超过100个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 标签      | 否    | 标识数据连接的属性。设置标签后，便于统一管理。 说明： 标签的名称，只能包含中文、英文字母、数字和下划线，不能以下划线开头，且长度不能超过100个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 适用组件    | 是    | 选择此连接适用的组件。勾选组件后，才能在相应组件内使用本连接。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | **基础与网络连通配置**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |||
   | 主机地址    | 是    | Linux操作系统主机的IP地址。 请参考[查看云服务器详细信息](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0123.html)获取。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 绑定Agent | 是    | 选择CDM集群，CDM集群提供Agent。如果没有可用的CDM集群，请参考[创建CDM集群](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0576.html)进行创建。 说明： - CDM集群作为管理中心数据连接Agent时，单集群的并发活动线程最大为200。即当多个数据连接共用同一Agent时，通过这些数据连接提交SQL脚本、Shell脚本、Python脚本等任务的同时运行上限为200，超出的任务将排队等待。建议您按照业务量情况规划多个Agent分担压力。   - 在调度Shell、Python脚本时，Agent会访问ECS主机，如果Shell、Python脚本的调度频率很高，ECS主机会将Agent的内网IP加入黑名单。为了保障作业的正常调度，强烈建议您使用ECS主机的**root** 用户将绑定Agent（即CDM集群）的内网IP加到**/etc/hosts.allow** 文件里面。 CDM集群的内网IP获取方式请参见[查看集群信息并修改配置](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0587.html)。    |
   | 端口      | 是    | 主机的SSH端口号。 Linux操作系统主机的默认登录端口为22，如有修改可通过主机路径"/etc/ssh/sshd_config"文件中的port字段确认端口号。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | KMS加密密钥 | 是    | 通过KMS加解密数据源认证信息，选择KMS中的任一默认密钥或自定义密钥即可。 说明： - 第一次通过DataArts Studio或KPS使用KMS加密时，会自动生成默认密钥dlf/default或kps/default。关于默认密钥的更多信息，请参见[什么是默认密钥](https://support.huaweicloud.com/dew_faq/dew_01_0045.html)章节。  - 仅支持通过对称密钥加密，暂不支持非对称密钥。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | **数据源认证及其他功能配置**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |||
   | 用户名     | 是    | 主机的登录用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 登录方式    | 是    | 选择主机的登录方式： - 密钥对  - 密码                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 密钥对     | 是    | "登录方式"为"密钥对"时，显示该配置项。 主机的登录方式为密钥对时，您需要获取并上传其私钥文件至OBS，在此处选择对应的OBS路径（OBS路径中不能存在中文字符）。 说明： 此处上传的私钥文件应和主机上配置的公钥是一个密钥对，详情请参见[密钥对使用场景介绍](https://support.huaweicloud.com/usermanual-ecs/ecs_13_0201.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 密钥对密码   | 否    | 如果密钥对未设置密码，则不需要填写该配置项。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 密码      | 是    | "登录方式"为"密码"时，显示该配置项。 主机的登录方式为密码时，填写主机的登录密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
      
   图1新建主机连接   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001262083445.png "点击放大")
   
   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   关键参数说明：
   - 主机地址：[已开通ECS主机](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0529.html#dataartsstudio_01_0529__li6183612122320)中开通的ECS主机的IP地址。
   
   - 绑定Agent：[已开通批量数据迁移增量包](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0529.html#dataartsstudio_01_0529__li948222884818)中开通的CDM集群。
    
   
   
5. 单击"测试"，测试数据连接的连通性。如果无法连通，数据连接将无法创建。
6. 测试通过后，单击"确定"，创建数据连接。
 
#### 开发Python脚本
1. 在"数据开发 \> 脚本开发"模块中创建一个Python脚本，脚本名称为"python_test"。 
   图2创建Python脚本   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001260813281.png)
   
   
2. 选择Python版本（以Python3为例），并选择主机连接，根据实际需要输入参数。 
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   配置的参数是指执行Python脚本时，向脚本传递的参数，参数之间使用空格分隔，例如：Microsoft Oracle。此处的"参数"需要在Python脚本中引用，否则配置无效。
   
   
3. 在编辑器中编辑Python语句。 
   本示例定义一个保存公司信息的字符串模板，然后应用该模板输出公司的信息。
   ```
   import sys
   Company_Name1=sys.argv[1]
   Company_Name2=sys.argv[2]
   template='No.:{:0>9s} \t CompanyName: {:s} \t Website: https://www.{:s}.com'
   context1=template.format('1',Company_Name1,Company_Name1.lower())
   context2=template.format('2',Company_Name2,Company_Name2.lower())
   print(context1)
   print(context2)
   ```
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   - [图3]中的脚本开发区为临时调试区，关闭脚本页签后，开发区的内容将丢失。
   
   - 主机连接：[建立主机数据连接](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0529.html#dataartsstudio_01_0529__section3216144795514)中创建的连接。
    
   图3编辑Python语句   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001383000193.png "点击放大")
   
   
   
4. 单击"保存"，并提交版本。
5. 单击"运行"执行Python语句。
6. 查看脚本运行结果。 
   图4查看脚本运行结果   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001294333494.png "点击放大")
   
   
   
 
