上篇已经说过需要使用python的背景了(java不会,.Net SDK没有与时俱进),没办法,只有去试试python。不过距离上一次使用python,已经过去了4年了。革命需要,必须快速把python捡起来,看懂项目,并编写python脚本。我大致总结如下几个方面,便可完成快速复习

1.python程序的入口

首先python是一门解释型语言,按顺序执行。其次每个模块都有一个 __name__ 属性,当其值是 __main__ 时,表明该模块自身在运行,否则这个模块就是被引入。

dosomething1()
if(__name__=="__main__"):
	print("Main")
else:
	print(__name__)
dosomething2()

所以上述代码python test.py执行顺序

  • dosomething1()
  • print(“Main”)
  • dosomething2()

如果是被引入的,则执行顺序

  • dosomething1()
  • dosomething2()

2.python命令行参数

python test.py arg1 arg2 arg3

pyvmomi-community-samples里面很多sample都是通过命令行参数来进行调试,然后有命令行解析方法解析命令,所以要运行这些示例,需要传命令行参数,在Visual Studio Code中,可以去编辑launch.json

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: 当前文件",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal",
      "args": [
        "--server",
        "192.168.0.110",
        "--username",
        "administrator@vsphere.local",
        "--password",
        "VMware1!"
      ]
    }
  ]
}

3.python代码缩进

python没有花括号{},全靠缩进来标识代码块,限制变量作用域,还有一点对于从.net过来的我来说很变态的一点,缩进不能空格和tab混用。空格还必须是4的倍数。算了,人家的领域,规规矩矩按照要求来吧。

这里还是借助Visual Studio Code帮我们省点事吧。

Preference->Settings

  • Insert Space:勾选,按Tab,就会插入空格
  • Tab Size:填4,按Tab就是4个空格

4.python类

必需内容:

  • class关键字

  • __init__构造函数

  • 所有的类方法都必须包含self

  • 创建实例,没有new关键字

  • 继承用小括号()

    • class 派生类名(基类名)
      
  • 私有变量,前面加两个下划线

    • **__**private_attrs
  • 公开变量,没有两个下划线

  • protected 类型的变量,只有一个下划线,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

  • 重写很简单,什么关键字都没有,只要是继承了父类,直接可以定义与父类签名一样的方法,相对于其他编译型语言还是省了个关键字

    • #!/usr/bin/python
      
      # -*- coding: UTF-8 -*-
      
           
      class Parent:        # 定义父类
      
         def myMethod(self):
            print '调用父类方法'
                  
      class Child(Parent): # 定义子类
      
         def myMethod(self):
            print '调用子类方法'
      

5.python模块和包

模块

就是一个python文件

# 导入整体模块

import xxx

# 导入模块中的某部分内容

from xxx imoprt yyy

模块是文件,那么包就是一个文件夹

包是使用“带点的模块名称”来构造Python模块名称空间的一种方法。

例如A.B,即指定子模块B,在A包中。

包的文件夹必需内容:

  • __init__.py:使Python将包含文件的目录文件夹视为包
    • __init__.py可以只是一个空文件,但是它也可以执行包的初始化代码,或者设置__all__变量

6.python搜索路径

当导入一个python模块,Python 解析器对模块位置的搜索顺序是:

  • 当前目录
  • 如果不在当前目录,Python 则搜索在环境变量 PYTHONPATH 下的每个目录。
    • 有些开源项目,引入本地包的时候,写的是全路径,这个基本都是PYTHONPATH 缺失当前项目,添加即可
  • 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

7.python安装whl

whl其实就是一个压缩包,把后缀名改为.zip,是可以完美解压的。一般情况,一个whl文件就是一个python包。安装方式

#安装wheel
pip install wheel

#安装包
pip install xxxx.whl

8.python导出依赖和安装

一般一个python会有很多依赖,我们可以手动导出所有的依赖包:

  • 导出
pip freeze > requestments.txt
  • 安装:安装导出的requestments.txt的依赖
pip install -r requirements.txt

9.python安装git远程包

先上命令

pip install --upgrade git+https://gitee.com/RandyField/vsphere-automation-sdk-python.git

这个看起来是一个命令,其实内部经历了两个步骤

#克隆
git clone https://gitee.com/RandyField/vsphere-automation-sdk-python.git

#安装依赖
python setup.py install

参考链接

https://docs.python.org/3/tutorial/modules.html

https://docs.python.org/3/tutorial/modules.html#packages

https://blog.csdn.net/Iron_Ye/article/details/80044242

https://blog.csdn.net/hhy_csdn/article/details/82263757

https://www.cnblogs.com/kaerxifa/p/11473841.html