如何使用 Python 脚本

在学习 Python 时,很多人把模块和脚本分不清楚,所以有必要解释下这两个概念:

  • 模块(module):是一个包含 Python 代码的纯文本文件,主要用于被其他 Python 文件导入和使用。

  • 脚本(script):也是一个包含 Python 代码的纯文本文件,但其旨在由用户直接执行,是顶级程序文件。

模块和脚本之间的主要区别在于:模块是用来导入的,而脚本是用来直接执行的。

无论哪种情况,重要的是要知道如何运行模块和脚本中的 Python 代码。

1

运行 Python 脚本

可以用任何纯文本编辑器编写 Python 代码,比如 Sublime Text,不仅功能强大,而且易于使用。当然,你也可以使用任何自己喜欢的编辑器。

使用 python 命令

假设,有一个名为 calc.py 的脚本,它里面定义了一个 add() 函数。如果要测试这个函数,可以这样编写:

def add(a, b):
    return a + b

if __name__ == '__main__':
    print('test: 2 + 3 =', add(2, 3))

注意:代码中的 if 语句很有必要,有了它,模块既可以被导入,也可以作为脚本来执行(下节会详细介绍)。

要使用 python 命令运行脚本,需要打开命令行并输入 python(如果有多个版本,则输入 python3),然后是脚本的路径:

$ python3 calc.py
test: 2 + 3 = 5

如果一切正常,在按下 Enter 键之后,将会在屏幕上看到打印的内容,是不是很简单呢!

使用脚本名

此外,也可以像 Shell 脚本一样执行 Python 脚本,只需要在第一行指定 Python 解释器的路径即可:

#!/usr/bin/env python3

def add(a, b):
    return a + b

if __name__ == '__main__':
    print('test: 2 + 3 =', add(2, 3))

对于 Python 来说,这是一个简单的注释,但是对于操作系统,这一行表示必须使用什么程序来运行文件。

要指定 Python 解释器的路径,有两种方式:

  • #!/usr/bin/python3:使用绝对路径。

    路径写死了,倘若解释器不在该路径下,则脚本无法执行。

  • #!/usr/bin/env python3:使用操作系统 env 命令,该命令通过搜索 PATH 环境变量来定位和执行 python3。

    路径并没写死,而是动态寻找。相比之下,这种写法更灵活、更具有通用性。

要执行这样的脚本,需要为它分配可执行权限,然后在命令行中输入文件名:

$ # 赋予可执行权限
$ chmod +x calc.py
$
$ # 使用脚本名运行脚本
$ ./calc.py
test: 2 + 3 = 5

可以看到,打印结果也正常输出了。

2

命令行参数

在上面测试 add() 的时候,我们给它传递了两个固定的值 - 2 和 3,倘若参数是可变的,该怎么办?

很简单,可以使用命令行传参 - 这是对上述形式的一个扩展:

python3 my_script.py <arguments>

为了解析传递的参数,我们需要用到 sys 模块:

#!/usr/bin/env python3

import sys

def add(a, b):
    return a + b

if __name__ == '__main__':
    args = sys.argv
    print(args)
    print(add(int(args[1]), int(args[2])))

通过使用 sys.argv,便能够获取命令行参数,它是一个列表类型。sys.argv[0] 表示代码本身文件路径,参数索引从 1 开始。

使用很简单,参数之间以空格隔开:

$ python3 calc.py 2 3
['calc.py', '2', '3']
5
$ python3 calc.py 4 6
['calc.py', '4', '6']
10

这样,就可以传递任意的参数了。

3

输出重定向

在默认情况下,脚本的输出是标准系统输出(stdout)。倘若我们要分析结果,那么将其保存起来会十分有用,可以利用重定向来做到这一点。

覆盖原有内容

只需要使用一个尖括号(>),后跟一个文件名,即可将输出重定向至文件:

$ python3 calc.py 2 3 > output.txt
$ python3 calc.py 4 6 > output.txt

这时,如果 output.txt 不存在,则会自动创建;但倘若文件已存在,则其内容将会被替换为新的输出(覆盖):

$ cat output.txt
['calc.py', '4', '6']
10

追加新内容

如果我们不想覆盖原有的内容,而是想将新的内容追加到文件的末尾,则必须使用两个尖括号(>>),而非一个:

$ # 先删除文件
$ rm -rf output.txt
$
$ python3 calc.py 2 3 >> output.txt
$ python3 calc.py 4 6 >> output.txt

再来看看 output.txt,这时所有的内容都被保留下来了:

$ cat output.txt
['calc.py', '2', '3']
5
['calc.py', '4', '6']
10

·END·
 

高效程序员

谈天 · 说地 · 侃代码 · 开车

长按识别二维码,解锁更多精彩内容

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值