引言
在本实验中,你将学习从命令行运行 Python 程序这一基本技能。这种方法对于自动化、脚本编写和部署应用程序至关重要。我们将指导你完成创建 Python 脚本、执行脚本以及向脚本传递参数的整个过程,所有这些操作都将在命令行界面中完成。
创建并运行一个简单的 Python 脚本
运行 Python 程序最常见的方式是将你的代码写入一个扩展名为 .py 的文件,然后使用终端中的 Python 解释器执行该文件。让我们从创建一个经典的“Hello, World!”程序开始。
首先,你需要创建一个新文件。在 WebIDE 左侧的文件浏览器中,右键单击 project 目录中的空白区域,然后选择“New File”。将文件命名为 hello.py。
接下来,打开 hello.py 文件并添加以下 Python 代码。这段代码使用内置的 print() 函数在控制台显示一条消息。
print("Hello, LabEx!")
现在你已经创建了脚本,可以运行它了。在你的 WebIDE 中打开集成终端(如果尚未打开,可以使用菜单 Terminal > New Terminal)。终端应该会在你保存文件的 /home/labex/project 目录中打开。
要执行脚本,请键入 python 命令,后跟你的文件名:
python hello.py
按下 Enter 后,你将在终端中直接看到脚本的输出。
Hello, LabEx!
你已成功从命令行创建并执行了你的第一个 Python 脚本。
使用命令行参数
当你可以于运行时向脚本传递信息时,从命令行运行脚本会变得更加强大。这些信息被称为命令行参数。Python 的 sys 模块提供了一种访问它们的方法。
让我们创建一个新脚本,该脚本根据提供的姓名作为命令行参数来问候用户。
在 /home/labex/project 目录中创建一个名为 greet.py 的新文件。
将以下代码添加到 greet.py。此脚本导入 sys 模块。命令行参数存储在 sys.argv 列表中。sys.argv[0] 始终是脚本本身的名称,后续参数从 sys.argv[1] 开始。
import sys
## 从第一个命令行参数获取姓名
name = sys.argv[1]
print(f"Hello, {name}!")
现在,从终端运行此脚本,但这次在脚本文件名后添加一个姓名。例如,我们使用“World”。
python greet.py World
脚本将“World”作为参数,并在输出中使用它。
Hello, World!
你可以尝试用你自己的名字运行它,看看输出如何变化。
python greet.py LabEx
Hello, LabEx!
这种技术使你的脚本能够灵活地为不同的输入进行重用。
使脚本更加健壮
如果在上一步中运行 greet.py 脚本而未提供姓名,会发生什么?让我们尝试一下。
python greet.py
你将遇到一个错误。
Traceback (most recent call last):
File "/home/labex/project/greet.py", line 4, in <module>
name = sys.argv[1]
IndexError: list index out of range
这个 IndexError 发生是因为脚本尝试访问 sys.argv[1],但由于没有提供参数,该索引不存在。健壮的脚本应该能够优雅地处理这种情况。
让我们修改 greet.py 来检查是否提供了参数。如果没有,它将使用一个默认姓名。我们可以使用 len() 函数来检查 sys.argv 列表中的项目数量。如果 len(sys.argv) 大于 1,则表示至少提供了一个参数。
使用以下代码更新你的 greet.py 文件:
import sys
if len(sys.argv) > 1:
## 如果提供了参数,则使用该参数
name = sys.argv[1]
else:
## 如果未提供参数,则使用默认姓名
name = "World"
print(f"Hello, {name}!")
现在,你的脚本更加健壮了。再次不带参数运行它:
python greet.py
这次,它会无错误地运行并使用默认姓名。
Hello, World!
当你提供参数时,它仍然能正确工作:
python greet.py LabEx
Hello, LabEx!
处理潜在错误并提供默认行为是编写可靠的命令行应用程序的关键实践。
总结
在本实验中,你学习了从命令行运行 Python 程序的必备技能。你从创建和执行一个简单的脚本开始。然后,你通过使用 sys 模块的命令行参数,使脚本更加动态和交互。最后,你学会了如何通过处理可能缺失参数的情况来使脚本更加健壮。对于任何想要构建命令行工具或自动化任务的 Python 开发者来说,这些都是基础技能。



