Mac和Linux终端运行.py文件的命令

听雨眠
听雨眠
发布时间:2026-11-12| 11人浏览过
原创

详细解析在Mac与Linux终端中运行.py文件的核心命令,包括基础执行、Shebang与权限配置、参数传递、虚拟环境调用、后台持久化及常见报错排查。

在 Mac 和 Linux 终端中运行 Python 脚本,最直接且通用的命令是 python3 script.py。当需要将脚本做成可独立调用的命令行工具时,可以通过添加 Shebang 并配置执行权限直接输入 ./script.py 运行;对于自动化脚本或后台任务,则常配合虚拟环境解释器路径或 nohup 命令执行。

Mac和Linux终端运行.py文件的命令
图 0:Mac 与 Linux 终端运行 Python 脚本的核心交互形态与执行方式速览

1. 基础运行命令:python3 script.py

无论使用的是 macOS 的 Terminal / iTerm2,还是各类 Linux 发行版(如 Ubuntu、Debian、CentOS、Fedora)的终端,最标准的运行方式就是直接调用 Python 解释器并传入脚本文件名:

终端操作bash / zsh
$ python3 script.py

读者初次操作时,常会产生一个疑问:为什么命令必须写成 python3,而不是简写成 python?

这是因为 Python 2 早在官方停止维护后便逐步从主流操作系统中剥离。从 macOS Monterey (12.3) 开始,苹果系统彻底移除了内置的 /usr/bin/python;在大多数现代 Linux 发行版中,python 命令默认未关联或仅作为可选别名存在。为了确保命令准确调用 Python 3 解释器,避免出现 command not found: python 报错,必须显式使用 python3。

在执行脚本前,建议先在终端核对解释器的就绪状态及当前版本:

终端命令查看环境
$ python3 --version
示例输出
Python 3.11.8

工作目录与文件路径的关系

运行 python3 script.py 命令成立的前提是:终端当前的“工作目录”(Current Working Directory)必须正是该文件所在的文件夹。如果脚本保存在 ~/projects/demo 目录下,标准操作步骤是先切换目录,再执行命令:

终端命令步骤:进入目录后运行
$ cd ~/projects/demo $ python3 script.py

如果不希望切换当前工作目录,也可以直接在命令中指定 .py 文件的相对路径或绝对路径:

终端命令直接使用完整路径执行
$ python3 /Users/username/projects/demo/script.py
Mac和Linux终端运行.py文件的命令
图 1:终端启动并执行 Python 脚本的四步标准流程

2. 将脚本变成直接执行的命令:Shebang 与 chmod +x

在日常使用中,读者经常会在开源工具或运维脚本中看到类似 ./script.py 甚至去掉后缀直接运行的形式。要让系统终端直接运行脚本而不需要在前面输入 python3,必须同时满足两个条件:脚本首行声明解释器路径(Shebang),以及为文件赋予操作系统级别的可执行权限。

步骤一:在 Python 脚本首行添加 Shebang

使用代码编辑器打开 script.py,在文件的第一行(必须是第 1 行第 1 个字符)加入以下指令:

Python 脚本首行script.py
#!/usr/bin/env python3 print("Hello from executable Python script!")

这里推荐使用 #!/usr/bin/env python3 而非硬编码的 #!/usr/bin/python3。原因是不同系统的解释器存放路径各异(例如 Mac 上 Homebrew 安装的路径通常在 /usr/local/bin/python3 或 /opt/homebrew/bin/python3,Linux 则可能位于 /usr/bin/python3)。/usr/bin/env 会在当前终端环境变量 PATH 中动态查找第一个可用的 python3,兼容性更好。

步骤二:使用 chmod 为文件赋予执行权限

新建的代码文件在 Linux 和 macOS 中默认只有读写权限,没有执行权限(x)。如果直接运行会提示 Permission denied。我们需要通过 chmod 命令增加执行权限位:

终端命令赋予执行权限
$ chmod +x script.py

权限设置完成后,在当前目录下输入 ./script.py 即可执行:

终端命令直接执行
$ ./script.py
示例输出
Hello from executable Python script!
为什么必须加 ./ 前缀?
在 Unix 体系(Mac 与 Linux)中,当前目录 . 默认不在系统的可执行搜索路径 $PATH 中。这是为了防止恶意程序在当前目录同名伪造系统指令(如伪造 ls)。通过加上 ./,读者明确告诉终端 shell:“请执行当前目录下的这个特定程序”。
Mac和Linux终端运行.py文件的命令
图 2:显式解释器调用与内核 Shebang 机制的底层执行原理对比

3. 传递命令行参数并由 Python 获取

许多实用脚本需要处理不同的外部输入。在终端执行 .py 文件时,所有跟在脚本名后面的内容都会作为参数传递给脚本,参数之间用空格分隔:

终端命令带参数执行示例
$ python3 process.py dataset.csv 100 --format=json

在 Python 脚本内部,可以通过标准库模块 sys.argv 接收这些参数:

Python 脚本实现process.py
import sys # sys.argv 是一个包含所有终端参数的字符串列表 print("脚本名称:", sys.argv[0]) if len(sys.argv) > 1: print("第1个参数 (文件名):", sys.argv[1]) if len(sys.argv) > 2: print("第2个参数 (处理行数):", sys.argv[2]) if len(sys.argv) > 3: print("第3个参数 (输出格式):", sys.argv[3])
示例输出
脚本名称: process.py 第1个参数 (文件名): dataset.csv 第2个参数 (处理行数): 100 第3个参数 (输出格式): --format=json

需要注意,sys.argv[0] 永远固定是脚本自身的文件名或路径,从 sys.argv[1] 开始才是用户输入的真正参数。如果参数值本身包含空格(例如包含空格的目录名),必须使用双引号包裹,如 python3 process.py "My Documents/data.csv"。

4. 虚拟环境(Virtual Environment)下的运行命令

在实际项目开发中,通常会使用 venv 创建相互隔离的 Python 运行环境以避免三方库版本冲突。针对虚拟环境中的 .py 脚本,有两种标准的运行方式:

方式一:先激活虚拟环境再运行

终端命令交互式开发常用
$ source .venv/bin/activate (.venv) $ python script.py

执行 source .venv/bin/activate 后,终端命令行前缀会出现虚拟环境名称(如 (.venv))。此时终端临时修改了环境变量 PATH,让 python 和 pip 优先指向虚拟环境内的二进制程序,因此可直接执行 python script.py。工作完成后,键入 deactivate 即可退出虚拟环境。

方式二:无需激活,直接指定虚拟环境中的解释器

在编写自动化部署脚本、Linux Crontab 定时任务或 systemd 守护进程时,激活子 shell 往往过于繁琐甚至容易因环境变量未加载而失效。此时最佳实践是直接调用虚拟环境目录下的解释器:

终端命令非交互式 / 定时任务首选
$ /path/to/project/.venv/bin/python /path/to/project/script.py

这种方式无需执行 source activate,解释器会自动绑定该虚拟环境下安装的依赖库,执行结果精准稳定。

5. 后台运行与输出日志重定向

直接在终端输入 python3 script.py 会占据当前前台控制台。一旦网络断开或关闭终端窗口,运行中的进程就会收到挂断信号(SIGHUP)并强制退出。如果脚本需要处理爬虫、模型训练或作为简易服务端持续运行,需要配合后台运行与输出重定向命令。

将标准输出与错误重定向到日志文件

终端命令前台输出重定向
$ python3 script.py > task.log 2>&1

其中 > task.log 表示将标准输出(stdout,文件描述符 1)重定向到 task.log 文件中;2>&1 表示将标准错误(stderr,文件描述符 2)合并输出到标准输出中。如果希望追加日志而非覆盖,可使用 >> task.log 2>&1。

完全后台运行与脱机常驻(nohup 与 &)

终端命令脱机后台持续运行
$ nohup python3 script.py > task.log 2>&1 &
示例输出
[1] 48291

这里的各部分各司其职:nohup(no hang up)告诉系统忽略会话断开的 SIGHUP 信号;末尾的 & 将进程置入后台;终端输出的 48291 是分配给该 Python 进程的唯一进程号(PID)。如果后续需要查看任务运行情况或终止任务,可使用以下命令:

终端命令监控日志与终止进程
# 实时查看输出日志 $ tail -f task.log # 查找对应的 Python 进程并关闭 $ ps aux | grep script.py $ kill 48291
Mac和Linux终端运行.py文件的命令
图 3:命令行参数解析、虚拟环境独立运行与后台输出重定向的技术流向示意图

6. 常见运行报错排查与解决办法

在终端执行 .py 文件的过程中,常会遇到以下几类典型报错,读者可对照排查:

报错一:command not found: python3

原因:当前操作系统没有安装 Python 3,或者安装路径未加入系统 PATH 环境变量。
解决办法:

  • Mac 用户:在终端运行 xcode-select --install 安装包含 Python 3 的开发者命令行工具,或者通过 Homebrew 执行 brew install python。
  • Linux (Ubuntu/Debian) 用户:执行 sudo apt update && sudo apt install -y python3。
  • Linux (CentOS/RHEL) 用户:执行 sudo yum install -y python3 或 sudo dnf install -y python3。

报错二:Permission denied

原因:执行 ./script.py 时文件缺少可执行权限;或者当前用户对脚本所在目录无读取/执行权限。
解决办法:在终端输入 chmod +x script.py,或者改用 python3 script.py 显式调用。

报错三:No such file or directory

原因:终端当前所在的工作目录并不存在该文件,或文件名大小写/拼写有误(Mac 与 Linux 严格区分文件名大小写)。
解决办法:先在终端输入 pwd 确认当前路径,再通过 ls 查看当前目录包含的文件。若文件在其他位置,使用 cd 进入目录,或提供完整文件路径。

报错四:ModuleNotFoundError: No module named 'xxx'

原因:终端运行命令所调用的 Python 解释器,与先前安装依赖库(如通过 pip)的解释器不是同一个实例。
解决办法:通过 which python3 检查当前使用的解释器路径;安装依赖时使用 python3 -m pip install xxx,确保安装行为与运行命令绑定在完全一致的 Python 环境下。

7. 场景决策与速查总结

为了方便读者在不同工作场景中快速选取最适宜的终端运行命令,下表整理了各种运行形态的对比:

应用场景 标准终端命令 前置条件 主要特征与优势
临时测试 / 开发调试 python3 app.py 已安装 Python 3 最简单通用,无需修改文件,易于上手
自制工具 / 类似原生命令 ./app.py 首行 Shebang + chmod +x 调用简洁,隐藏解释器实现,适合做成 CLI 小工具
虚拟环境隔离运行 .venv/bin/python app.py 已创建虚拟环境 依赖隔离,无需手动激活环境,适合脚本和部署流程
长时间耗时任务 nohup python3 app.py > log 2>&1 & 无特殊要求 关闭终端不掉线,标准输出与错误完整落盘
Mac和Linux终端运行.py文件的命令
图 4:Mac 与 Linux 终端运行 Python 脚本的决策树与核心报错排查速查图

掌握以上命令后,无论是日常在本地 Mac 上测试 Python 脚本,还是在 Linux 服务器上调度生产任务,都可以根据具体需求灵活选择最稳定、最快捷的终端运行方式。

相关专题:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。