Linux/macOS Shell中运行Python脚本的基础命令与语法

顾星河
顾星河
发布时间:2026-11-07 | 7人浏览过
原创

本文系统梳理在Linux与macOS的终端环境(Bash/Zsh)中运行Python脚本的基础命令、路径引用、执行权限配置以及参数传递语法,帮助读者掌握命令行调用的实际操作规范。

在 Linux 和 macOS 的终端(Shell,如 Bash 或 Zsh)中运行 Python 脚本,本质上有两条路:一是显式调用解释器并将文件路径作为参数输入;二是为脚本添加 Shebang 声明并赋予执行权限,使其表现得像原生命令行工具。本文将从解释器定位、执行权限配置、相对与绝对路径调用,一直讲到脚本接收外部参数的语法与排错方式。

一、明确你的 Python 解释器命令

在现代类 Unix 系统中,直接输入 python 往往会触发警告,甚至提示命令不存在。macOS 从 12.3 开始移除了自带的 Python 2.7,而现代 Linux 发行版(如 Ubuntu 20.04+)默认只提供 python3。因此,第一步应当确认当前 Shell 指向的解释器位置与版本。

# 检查当前默认的 Python 3 解释器版本
python3 --version

# 查看该命令在系统中的绝对物理路径
which python3
示例输出:
Python 3.10.12
/usr/bin/python3

如果输出明确显示了版本号与安装路径,说明你的 Shell 环境已经具备直接运行脚本的基本条件。

二、直接调用解释器运行脚本

最通用、最不需要前期准备的方式,就是在终端中输入解释器命令,紧跟你的脚本文件路径。这种方式并不要求脚本文件具备执行权限,只要当前用户对该文件具有读取权限即可。

假设在桌面目录下存在一个名为 app.py 的文件,其内容仅有一行输出:

# app.py 示例内容
print("Task executed via explicit interpreter.")

在 Shell 中,你可以通过相对路径或绝对路径来执行它:

# 方式 A:切换到脚本所在目录后,使用相对路径执行
cd ~/Desktop
python3 app.py

# 方式 B:在任意工作目录下,直接指定完整路径执行
python3 /Users/username/Desktop/app.py
示例输出:
Task executed via explicit interpreter.
Linux/macOS Shell中运行Python脚本的基础命令与语法
图 1:显式调用解释器执行 Python 脚本的系统内部流程

三、将脚本变为可执行程序:Shebang 与权限控制

在日常运维或自动化工作中,反复敲打 python3 会显得繁琐。通过配置,我们可以让脚本像系统内置命令(例如 ls、grep)一样,通过 ./script.py 直接运行。这需要满足两个硬性前提:脚本首行正确的 Shebang 指令和文件本身的执行权限。

1. 编写 Shebang 行

Shebang 是指脚本第一行以 #! 开头的代码。内核会解析这一行,决定用哪个二进制程序来运行后续文本。推荐写法如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

print("Executed directly as an executable!")
为什么使用 /usr/bin/env python3 而非固定绝对路径?
不同系统的 Python 路径各不相同(例如 macOS 上的 Homebrew 路径、Linux 的系统路径,或者虚拟环境)。env 程序会在当前 Shell 会话的 $PATH 环境变量中动态搜寻第一个可用的 python3,从而极大地提升脚本的可移植性。

2. 赋予执行权限与相对路径陷阱

新创建的文本文件在 Linux/macOS 下默认只有读写权限,没有执行权限(x)。直接运行会提示 Permission denied。需要使用 chmod 命令变更权限:

# 赋予当前用户对该脚本的执行权限
chmod +x app.py

# 检查权限状态
ls -l app.py
示例输出:
-rwxr-xr-x 1 user staff 108 Sep 24 10:00 app.py

赋予权限后,运行当前目录下的文件必须加上 ./,即执行 ./app.py。这是因为出于安全防护考虑,类 Unix 系统的 $PATH 变量默认不包含当前目录 .,前缀 ./ 明确告诉 Shell :“请在当前工作路径下寻找该文件并执行”。

Linux/macOS Shell中运行Python脚本的基础命令与语法
图 2:独立可执行脚本配置的完整操作步骤

四、命令行参数传递基础与 sys.argv 解析

很多时候,脚本不能写死输入,需要依赖 Shell 在启动时传入动态配置。在命令行中,紧跟在脚本名称后面的空格分割字符串就是“位置参数”。在 Python 内部,标准库 sys 的 argv 列表直接负责接收这些参数。

#!/usr/bin/env python3
import sys

# sys.argv 是一个包含所有命令行参数的列表
print(f"脚本名称 (sys.argv[0]): {sys.argv[0]}")
print(f"传入的参数总数: {len(sys.argv) - 1}")

# 逐一读取参数
for index, arg in enumerate(sys.argv[1:], start=1):
    print(f"参数 {index}: {arg}")

保存上述文件为 params.py,并在终端中运行:

python3 params.py data.csv --verbose "hello world"
示例输出:
脚本名称 (sys.argv[0]): params.py
传入的参数总数: 3
参数 1: data.csv
参数 2: --verbose
参数 3: hello world

这里有两个非常关键的基础规则:第一,sys.argv[0] 永远代表当前正在执行的脚本本身路径或文件名;第二,包含空格的字符串必须使用双引号或单引号包裹,否则会被 Shell 切分为多个独立参数。

Linux/macOS Shell中运行Python脚本的基础命令与语法
图 3:Shell 命令行字符串到 Python sys.argv 列表元素的映射关系

五、运行机制对比与知识总结

理解显式执行与 Shebang 执行的区别,有助于我们在实际工作流中做出合理选择。简单脚本或单次调试推荐显式调用,而用于系统维护、Crontab 定时任务或交付他人使用的工具脚本,推荐使用 Shebang 并规范权限。

Linux/macOS Shell中运行Python脚本的基础命令与语法
图 4:两种运行脚本方式的核心特性与适用条件对比

六、常见报错排查

  • zsh: command not found: python:当前终端环境没有建立名为 python 的软链接。请直接统一使用 python3 命令。
  • zsh: permission denied: ./script.py:未赋予执行权限。执行 chmod +x script.py 即可修复。
  • /usr/bin/env: 'python3\r': No such file or directory:这是非常经典的“回车换行符”跨平台问题。脚本如果在 Windows 下编辑过,行尾格式会是 CRLF。在 Linux/macOS 下需使用 dos2unix script.py 或通过编辑器将其重新保存为 LF 换行符。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表