假设你有一个名为 hello.py 的 Python 脚本文件,内容如下:

# hello.py
import time
import sys
print("Hello, Linux!")
print("Script name is:", sys.argv[0])
print("Current time is:", time.ctime())
for i in range(3):
print(f"Counting: {i}")
time.sleep(1)
print("Script finished.")
直接使用 python 或 python3 命令(最常用、最推荐)
这是最直接、最安全的方法,因为它明确告诉系统使用哪个 Python 解释器来执行脚本。
基本语法
python3 your_script_name.py
或者如果你的系统默认 python 命令指向 Python 3:
python your_script_name.py
示例:
python3 hello.py
输出:

Hello, Linux!
Script name is: hello.py
Current time is: Wed Oct 26 10:30:00 2025 # 时间会变
Counting: 0
Counting: 1
Counting: 2
Script finished.
传递参数给脚本
你可以在脚本名后面加上参数,这些参数会作为列表 sys.argv 传递给 Python 脚本。
示例:
python3 hello.py arg1 arg2 arg3
脚本修改后(为了更好地展示参数):
# hello.py
import sys
print(f"Number of arguments: {len(sys.argv)}")
print("Argument List:", str(sys.argv))
执行与输出:

$ python3 hello.py arg1 arg2 arg3 Number of arguments: 4 Argument List: ['hello.py', 'arg1', 'arg2', 'arg3']
让脚本可执行(chmod +x)
这种方法让脚本文件本身具有执行权限,你可以像执行一个普通的 Linux 命令一样直接运行它,而无需输入 python3。
给脚本文件添加执行权限
使用 chmod +x 命令:
chmod +x hello.py
执行后,你可以用 ls -l 查看,文件权限会变成 -rwxr-xr-x,表示所有者、组和其他用户都有执行权限。
添加 "Shebang" 行(非常重要!)
为了让系统知道这个文件应该用哪个解释器来执行,你必须在脚本的第一行加上 "Shebang" 行。
#!/usr/bin/python3:这是最常见的 Shebang,它告诉系统使用/usr/bin/python3这个路径下的解释器。#!/usr/bin/env python3:更推荐 这种写法,它会去系统的环境变量PATH中查找python3命令,这使得脚本的可移植性更好,因为不同系统上 Python3 的安装路径可能不同(比如可能是/usr/local/bin/python3)。
修改后的 hello.py 文件:
#!/usr/bin/env python3
# 你的 Python 代码
import time
import sys
print("Hello, Linux!")
print("Script name is:", sys.argv[0])
# ... (其余代码不变)
执行脚本
你可以直接在终端中运行它:
方式 A:使用相对路径或绝对路径
# 使用相对路径 ./hello.py # 使用绝对路径 /path/to/your/hello.py
注意:如果你直接输入
hello.py,系统可能找不到它,除非你把当前目录()添加到PATH环境变量中(不推荐)。
方式 B:将脚本移动到 PATH 中的目录(如 /usr/local/bin)
如果你想让这个脚本在任何地方都能像命令一样直接调用(hello-world),可以这样做:
- 重命名脚本,去掉
.py后缀(可选,但更符合命令习惯):mv hello.py hello-world
- 给它执行权限:
chmod +x hello-world
- 移动到
PATH中的一个目录,/usr/local/bin:sudo mv hello-world /usr/local/bin/
- 现在你可以从任何地方直接执行它:
hello-world
使用 import 模块的方式执行(适用于开发调试)
这种方法并不直接“运行”脚本,而是将脚本作为一个模块导入到 Python 解释器中,这在开发调试时非常有用。
使用 -m 标志
-m 标志会将一个模块或包作为脚本来运行,对于你自己的脚本,你需要确保它是一个有效的模块(即,它所在的目录可以被 Python 找到)。
示例:
假设你的 hello.py 在当前目录下。
python3 -m hello
注意:
- 命令后面是模块名,不带
.py后缀。 - 脚本中的
sys.argv[0]会显示为-m,而不是文件名。 - 这种方式在执行项目中的测试框架(如
pytest)或管理工具(如django-admin)时非常常见。
在交互式 Python 解释器中执行
这种方法适用于快速测试一小段代码,不适用于完整的脚本。
- 首先启动 Python 解释器:
python3
- 然后使用
exec()函数并读取文件内容:>>> exec(open('hello.py').read())或者更简洁的
exec()语法(Python 3.6+):>>> exec(open('hello.py').read())
输出:
Hello, Linux!
Script name is: hello.py
Current time is: Wed Oct 26 10:30:00 2025
Counting: 0
Counting: 1
Counting: 2
Script finished.
>>>
总结与对比
| 方法 | 命令示例 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 直接调用解释器 | python3 hello.py |
- 最清晰,明确指定了解释器 - 最安全,不受系统默认 Python 版本影响 - 适合所有情况 |
- 每次都要输入 python3 |
日常开发、生产环境部署、跨平台脚本 |
| 设置可执行权限 | ./hello.py (需 chmod +x 和 Shebang) |
- 最方便,像普通命令一样执行 - 脚本可移植性好(配合 env) |
- 需要修改文件本身(加 Shebang) - 需要设置文件权限 |
需要频繁执行的脚本、工具脚本、部署脚本 |
| 作为模块执行 | python3 -m hello |
- 符合 Python 模块化思想 - 与标准工具(如 pytest)用法一致 |
- sys.argv 行为不同- 需要模块化结构 |
开发测试、执行项目中的管理模块 |
| 交互式解释器 | >>> exec(open('...').read()) |
- 适合快速调试、测试片段代码 | - 不适合完整脚本 - 会阻塞交互式会话 |
在 Python Shell 中快速测试脚本内容 |
最佳实践建议
- 对于初学者和日常使用:强烈推荐方法一 (
python3 script.py),它简单明了,不容易出错。 - 当你需要创建一个可重用的命令行工具时:使用方法二,记得用
#!/usr/bin/env python3作为 Shebang,并把脚本放到PATH中,这样会非常专业和方便。 - 在项目开发中:方法三 (
python3 -m my_module) 是一种非常好的实践,尤其是在使用pytest、unittest等测试框架时。 - 避免:不要为了省事而将
python3或python命令硬编码到 Shebang 中(如#!/usr/bin/python3),优先使用#!/usr/bin/env python3以提高兼容性。
