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 临时传环境变量标准用法
相关推荐
Shorasul1 小时前
mysql如何利用并行查询提速_mysql 8.0并行扫描特性.txt
jvm·数据库·python
Sam_Deep_Thinking2 小时前
Spring Bean作用域的设计与使用
java·后端·spring
Devin~Y2 小时前
互联网大厂Java面试:Spring Boot/Redis/Kafka/K8s 可观测 + RAG(向量检索/Agent)三轮追问实录
java·spring boot·redis·kafka·kubernetes·spring mvc·webflux
TaoSense2 小时前
全球消费类家庭安防监控行业深度研究报告:AI 驱动下的产业变革与投资机遇
java·人工智能·struts
雨墨✘2 小时前
SAP硬件选择详解:服务器、存储与网络的全面解析
运维·服务器·网络
随风,奔跑2 小时前
SpringCloudAlibaba(二)
java·spring·ribbon·负载均衡
m0_716430072 小时前
如何截断SQL小数位数_使用TRUNCATE函数控制精度
jvm·数据库·python
2301_782659182 小时前
mysql如何进行全量数据库备份_mysqldump工具的使用技巧
jvm·数据库·python
SiYuanFeng2 小时前
打开vscode总是提示未找到python的解决办法(打开终端却能找到)
ide·vscode·python