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 临时传环境变量标准用法
相关推荐
databook1 小时前
使用 SciPy 库进行时间序列分析
python·数据分析·scipy
java资料站1 小时前
十一、评估测试
开发语言·人工智能·python
szial1 小时前
网络爬虫与 CDP 实战(二):浏览器能访问,Python 却被拒绝?拆开登录态与 CSRF
爬虫·python·csrf
shuoshuohaohao1 小时前
MyBatis 小知识点
java·spring·mybatis
海上小飞龙2 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂2 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
一条破秋裤2 小时前
Linux 共享内存通信:POSIX 共享内存与 mmap
linux·运维·服务器
怕浪猫2 小时前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
谢亮_vipxieliang3 小时前
泛型擦除、通配符与 PECS 一次讲透
java·面试
贵州山魈羡民3 小时前
【玩转手机】通过 Podroid 上的 Alpine 部署 1Panel,把微型服务器装进口袋
运维·服务器