Python 命令行参数 + 环境变量

Python 命令行参数 + 环境变量

一、argparse 基本用法

  1. argparse 用于接收命令行参数(args)
  2. 先定义参数规则,再调用 parse_args() 自动解析
  3. args = parser.parse_args() 会自动读取 sys.argv 并匹配规则
  4. 最终得到一个对象 args,通过 .属性名 直接使用参数

最简示例

python 复制代码
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("input")
args = parser.parse_args()

print(args.input)
bash 复制代码
python test.py hello

二、位置参数(必选参数)

  1. 靠位置区分,顺序不能乱
  2. 不需要加 ---
  3. 多个位置参数 → 完全按传入顺序匹配

多位置参数示例

bash 复制代码
parser.add_argument("name")
parser.add_argument("age")
parser.add_argument("city")
bash 复制代码
python test.py zouwei 25 beijing

对应关系:

  • 第 1 个值 → args.name
  • 第 2 个值 → args.age
  • 第 3 个值 → args.city

三、可选参数

  1. -- 开头,如 --mode
  2. 可设置短别名 -m
  3. 顺序不固定,必须放在所有位置参数之后
  4. 可传可不传,可设置默认值 default=

定义示例

bash 复制代码
parser.add_argument("--mode", "-m", default="test")
parser.add_argument("--count", "-c", type=int, default=1)

合法运行方式

bash 复制代码
python test.py myfile --mode run -c 10
python test.py myfile -m run -c 10
python test.py myfile -c 10 -m run

四、位置参数与可选参数的位置关系

  1. 所有位置参数必须写在最前面,且顺序固定
  2. 可选参数必须写在位置参数之后
  3. 可选参数之间顺序可任意调换
  4. 不能把可选参数插在多个位置参数中间

✅ 正确

bash 复制代码
python test.py name age city --mode a -c b
bash 复制代码
python test.py name --mode a age city

五、Python 读取系统环境变量

  1. 使用内置库 os
  2. 推荐:os.getenv("VAR", 默认值),不存在不报错
  3. 也可使用 os.environ["VAR"],但不存在会抛异常
  4. 环境变量由操作系统传入,Python 只是读取

示例

复制代码
import os

nickname = os.getenv("zouwei_nickname", "default_name")
print(nickname)

六、Linux 临时环境变量语法

复制代码
VAR=value python3 test.py
  1. 这是 Shell 语法,不是 Python 语法
  2. 作用:仅给当前这次运行的程序设置临时环境变量
  3. 程序运行结束后变量自动销毁,不污染系统
  4. Python 中可通过 os.getenv() 直接获取

运行:

复制代码
zouwei_nickname=xwhking python3 test.py

七、完整综合示例(可直接运行)

python 复制代码
import argparse
import os

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="args + env demo")

    # 位置参数
    parser.add_argument("username")
    parser.add_argument("uid")

    # 可选参数
    parser.add_argument("--role", "-r", default="guest")

    args = parser.parse_args()

    # 读取环境变量
    nickname = os.getenv("zouwei_nickname", "nonick")

    print("==== 位置参数 ====")
    print("username:", args.username)
    print("uid:", args.uid)

    print("==== 可选参数 ====")
    print("role:", args.role)

    print("==== 环境变量 ====")
    print("nickname:", nickname)

运行命令:

bash 复制代码
zouwei_nickname=xwhking python3 test.py zouwei 10086 -r admin

八、核心总结

  1. 位置参数靠顺序,必写在前,不能乱序
  2. 可选参数靠名字(--xxx),顺序随意,必须在后
  3. -x--xxx 的缩写,功能完全一样
  4. parse_args() 自动解析命令行,无需手动处理字符串
  5. 环境变量由系统传入,os.getenv() 安全读取
  6. VAR=value python xxx.py 是 Linux 临时传环境变量标准用法
相关推荐
ps酷教程6 小时前
Jackson 解决没有无参构造函数的反序列化问题
java
NiceCloud喜云6 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
为思念酝酿的痛6 小时前
POSIX信号量
linux·运维·服务器·后端
AI玫瑰助手6 小时前
Python函数:默认参数的定义与注意事项
开发语言·python·信息可视化
weixin_468466856 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
小糖学代码7 小时前
LLM系列:环境搭建:5.Python-dotenv 环境变量管理
人工智能·python·深度学习·神经网络
_日拱一卒7 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
隔窗听雨眠7 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
人还是要有梦想的7 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
智慧物业老杨7 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python