![网络工程师的Python之路:网络运维自动化实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/47/35011047/b_35011047.jpg)
1.3 在Linux下使用Python 3.8.2
前面提到本书只介绍在CentOS命令行终端里使用Python的方法,在GNOME桌面环境下使用Python的方法不在本书的讨论范围内。下面介绍交互模式和脚本模式在CentOS中的使用方法。
1.3.1 交互模式
我们知道,在CentOS的命令行终端里输入命令python3.8即可进入Python 3.8.2的解释器,也就进入了Python的交互模式,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-044-01.jpg?sign=1739286703-VoXojmh5zYHwLU7BMKnQb0hDEk32xVZx-0-11fff4a771202ea100cf856896702139)
在Python解释器里输入第一段代码print ('hello, world!'),解释器随即打印出了“hello,world!”的内容。这种“即时反馈”的特性是交互模式下特有的,脚本模式下不具备,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-044-02.jpg?sign=1739286703-8aAWd0hrctzGE2fupy1j4AacC4oAOXrG-0-3de22678b90014cec92b7f46c8e5e54a)
1.3.2 脚本模式
在CentOS的命令行终端里,我们可以使用文本编辑器来创建脚本,CentOS有几种常见的文本编辑器,如emacs、nano、vi等。这里介绍用vi创建Python脚本的方法。
关于vi的用法本书将只做简单介绍。另外,vi有一个加强版本叫作vim,两者的具体区别不在本书的讨论范围内。读者只需要知道在创建Python脚本时,vim支持语法高亮,而vi不支持。
vi不支持语法高亮,仅显示PuTTY默认字体的颜色,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-045-01.jpg?sign=1739286703-WhSbHTQBt0m0fmE6dJUUQbat55pirjuD-0-8066b287f5f3093777dc3f9aa1c67e16)
vim支持语法高亮,显示彩色字体,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-045-02.jpg?sign=1739286703-Xq8VcFQBrEfPspgx10N9lXCpAV2Sz4Ho-0-20a9b37d69e9141aac92c0d37901583f)
除此之外,两者对Python的支持并无本质区别,是否喜欢语法高亮全凭个人喜欢。只需要注意一点:vi是CentOS安装时自带的文本编辑器,vim则需要通过输入命令yum install vim安装后才能使用。
下面用实例介绍使用vi创建Python脚本的方法。
首先输入命令vi test.py,创建一个名为test.py的Python脚本,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-046-01.jpg?sign=1739286703-7JXl1ktR71RdufSpFrqJKFnDdtSJarj8-0-d55ccb4a337d61bc5f1d046523b3a5df)
进入vi后,按“i”键进入输入模式(屏幕左下角会显示“- - INSERT - -”),输入第一段代码print ('hello, world!'),如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-046-02.jpg?sign=1739286703-8CnhVHlR5on7aOOmsxS9hxurlM6lAW5A-0-28615ece2a7deb72aba5b995cad68bb8)
然后按“ESC”键,在屏幕左下角的“- - INSERT - -”消失后,接着输入:wq,按回车键后即可保存文件并退出vi,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-047-01.jpg?sign=1739286703-4uM2OZPJm0qkDstKSAm0BO33ed8Lh7mw-0-feba8ef8bf67961b661a230e9d08344a)
之后回到命令行终端,输入ls即可看到刚刚创建成功的Python脚本test.py,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-047-02.jpg?sign=1739286703-xpPuSz1GtZjRYDFbOWCPXepEP4qMPXNw-0-b849c365187737ae163073af57e1799c)
1.3.3 运行Python脚本
与Windows命令行终端一样,在CentOS命令行终端也是通过输入python xxx.py来运行Python脚本的,不同的是,因为本书以Python 3.8.2为例,这里需要把python换成python3.8,写成python3.8 xxx.py来运行脚本,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-047-03.jpg?sign=1739286703-G1Yte4gm6b1wnDymJQOo39ROoxFk7cfA-0-b94a15f0d89c0367c77a2a7f1458b772)
1.3.4 Shebang符号
在Linux和UNIX里,符号#!叫作Shebang,通常可以在Linux/UNIX系统脚本中第一行的开头看到它。它的作用是指明执行脚本文件的解释程序。写在Shebang后面的解释程序如果是一个可执行文件,则当执行脚本时,Shebang会把文件名作为参数传递给解释程序去执行。比如python3.8 test.py中的python3.8是解释程序,test.py是文件名,使用Shebang后,可以省去解释程序,把python3.8 test.py写成./test.py就可以运行Python脚本了。另外,Shebang指定的解释程序必须为可执行程序,否则系统会报错“Permission denied.”。
因此,如果你觉得每次都需要输入命令python2、python3或者python3.8来运行脚本比较麻烦,则可以在脚本的开头部分使用Shebang符号,然后在其后面加上/usr/bin/env python3来指定python3为解释程序(同理,如果你想使用python2来做解释程序,则可以写成#!/usr/bin/env python2),如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-048-01.jpg?sign=1739286703-BlAj3BzNp5kgabrLg7AaLfg1zLIqhsii-0-ff8dee81fdda4e5655bd96593da3d5cf)
将脚本保存并退出后,用chmod命令将test.py改为可执行,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-048-02.jpg?sign=1739286703-3qhgPQFdQ4tGonm75Zuzi5xKa2szbxuo-0-79f5b3e2e62515c1052275b0317ffbaa)
然后就可以用./test.py来运行脚本,省去每次都必须输入命令python2、python3或者python3.8的麻烦,如下图所示。
![](https://epubservercos.yuewen.com/3AC371/18685354508165106/epubprivate/OEBPS/Images/39806-00-049-01.jpg?sign=1739286703-lzDDbYEJ4KvMVikPifo7p2MCQ5QfhRbY-0-ef4c4cf4fc3c801ce9304737c7d98597)