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 临时传环境变量标准用法
相关推荐
wdfk_prog4 分钟前
lely-canopen-rtt:为什么推荐在 RT-Thread 上使用 Lely CANopen 构建主站
java·运维·缓存·docker·容器
hhzz5 分钟前
【OpenCV 入门到精通 04】视频入门与绘图交互:从摄像头到鼠标画笔
人工智能·python·opencv·计算机视觉·音视频·交互
Thomas.Sir5 分钟前
第40课:TensorFlow|模型推理部署前置知识【离线推理、接口调用基础】
人工智能·python·tensorflow
2601_962387827 分钟前
多源数据查询指南:MySQL 联邦、Python 聚合与 Presto 引擎全对比
python·mysql·数据集成·presto·联邦查询
Token掘金室10 分钟前
JSON模式结构化输出报错
java·服务器·json
一技安身12 分钟前
【信创】外网打包ragflow镜像并导入内网银河麒麟V10arm64服务器
运维·服务器
1314lay_100713 分钟前
asp文件的服务器控件要使用CssClass,否则会失效。导致上传服务器之后,按钮禁用时的效果出问题了,没有正确应用样式
服务器
weixin1997010801614 分钟前
《Mercari OTA 直连接入:日本二手电商出海的API通道与600次/分钟限流实战》(附Python源码)
开发语言·数据库·python
秋饼15 分钟前
Spring AI 2.0 接入 DeepSeek V4.1 Flash 生产级实战
java·ai·技术分享·后端开发
IT枫斗者枫哥16 分钟前
Java 分批导出仍然 OOM?用 32 MiB 堆复现三种 CSV 写法
java