当前位置: 首页 > news >正文

命令行参数python sys模块_Python中处理命令行参数的3种方法

作者|Dardan Xhymshiti

编译|VK

来源|Towards Data Science

1.sys模块

Python中的sys模块具有argv功能。当通过终端触发main.py的执行时,此功能返回所有命令行参数的列表。返回列表中的第一个元素是main.py.

考虑下面的main.py示例

import sys

list_of_arguments = sys.argv

print(list_of_args[0])

print(list_of_args[1])

print(list_of_args[2])

print(list_of_args[3])

触发main.py:

python main.py first_arg "[second_arg]" "{\"arg\": 3}"

返回:

test.py

first_arg

[second_arg]

{"arg": 3}

2.带有大参数的sys模块

这是一种为Python代码提供参数的简单又强大的方法。它不是提供提供多个参数,而是提供单个“大”参数。这一个大参数是一个字典,键表示参数名,值表示它们的对应值。

由于在Python中读取时,dictionary参数被表示为字符串,因此应该将其转换为字典。这可以通过使用ast.literal_eval或者json.loads函数做到。ast或json模块需要相应地导入。

考虑下面的main.py示例:

import sys

import ast

raw_arguments = sys.argv[1]

print(raw_arguments)

arguments = ast.literal_eval(raw_arguments)

print(arguments['name']) # John

print(arguments['surname']) # Doe

print(arguments['age']) # 22

触发mian.py:

python main.py "{\"name\": \"John\", \"surname\": \"Doe\", \"age\": 22}"

返回:

{"name": "John", "surname": "Doe", "age": 22}

John

Doe

22

3.argparse模块

如果你想为应用程序提供适当的命令行界面,那么argparse就是要使用的模块。这是一个成熟的模块,提供开箱即用的参数解析、帮助消息以及参数被误用时会自动抛出错误。Python默认安装此模块。

要充分利用argparse提供的功能,需要一些时间来掌握。作为一个示例,考虑以下示例main.py:

import argparse

parser = argparse.ArgumentParser(description='Personal information')

parser.add_argument('--name', dest='name', type=str, help='Name of the candidate')

parser.add_argument('--surname', dest='surname', type=str, help='Surname of the candidate')

parser.add_argument('--age', dest='age', type=int, help='Age of the candidate')

args = parser.parse_args()

print(args.name)

print(args.surname)

print(args.age)

初始化ArgumentParses的对象后,我们使用add_argument函数添加所有参数。此函数接收许多参数,其中包括参数名称(例如--name)、目标变量、预期数据类型、要显示的帮助消息等。

触发main.py:

python main.py --name John --surname Doe --age 22

返回

John

Doe

22

结论

很多时候,你需要向Python脚本传递参数。Python通过sys模块提供对这些参数的访问。你可以直接访问argv并处理自己的参数解析,也可以使用其他模块例如argparse为你完成这项工作。

在我的日常编程生活中,如果我是代码的唯一用户,我会使用sys时;如果这代码准备用于生产时,我会使用argparse。

相关文章:

  • python菜鸟教程for循环_Python for 循环语句
  • 格力手机2 官方固件_格力悄悄上线首部双模5G手机:搭载骁龙765G,售价2699元起...
  • c#怎么拟合函数得到参数_数值计算(三十七)给定函数的参数拟合
  • python decorators_Python进阶之强大的装饰器 Decorators (一)
  • 设备能力指数cmk计算公式_拧紧微课堂|关于CM,CMK,CP,CPK
  • sql 转置_SQL -- 练习汇总
  • python语言中打印到屏幕上的函数是什么_Python基础之白话说函数
  • 概率论与数理统计思维导图_2020年基础考试高等数学思维导图
  • 用python画圆角矩形_如何用OpenCV绘制圆角矩形(带圆角的矩形)?
  • vfp控制excel选择全表_Excel快速填充功能,让你输入数据不只是快一点点
  • 遍历list 分组求和_LeetCode刷题实战49:字母异位词分组
  • spark labeledpoint函数用法_Hive常用的函数总结
  • python字符串子串替换方法_python替换字符串中的子串图文步骤
  • 多选框位置调整_水下目标检测竞赛冠军方案:多图像融合增强 | URPC 2019
  • unexpected eof while parsing什么意思_少侠留步!你知道if、while和递归之间的关系吗?...
  • 自己简单写的 事件订阅机制
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 2017年终总结、随想
  • HTTP那些事
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • PAT A1120
  • python大佬养成计划----difflib模块
  • Python实现BT种子转化为磁力链接【实战】
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 从零开始学习部署
  • 回顾 Swift 多平台移植进度 #2
  • 讲清楚之javascript作用域
  • 力扣(LeetCode)357
  • 你不可错过的前端面试题(一)
  • 如何学习JavaEE,项目又该如何做?
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 湖北分布式智能数据采集方法有哪些?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • ${factoryList }后面有空格不影响
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2)Java 简介
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (function(){})()的分步解析
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)菜鸟学数据库(三)——存储过程
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转载)hibernate缓存
  • (转载)从 Java 代码到 Java 堆
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net7 环境安装配置
  • .NET和.COM和.CN域名区别
  • .net流程开发平台的一些难点(1)
  • @Data注解的作用
  • @PreAuthorize注解
  • @ResponseBody