sys.argv和argparse和os.environ/python命令行中键入参数的三种方式

2023-11-11

参考:

  • 命令行运行Python脚本时传入参数–3种方法 https://blog.csdn.net/helloasimo/article/details/124210144

x.1 sys.argv

sys.argv类似于c中main函数中的argv,存储了用户的输入信息。

当你用bash,在shell或者terminal中运行脚本时,你的参数其实传到了sys.argv里面。sys.argv是一个数组,它记录了你在命令行中的输入,并以空格作为分隔符,以字符串形式进行存储。

请添加图片描述

案例如下:

# test.py
import sys
print(sys.argv)

# bash
>> python test.py 2323
>> ['test.py', '2323']

请添加图片描述

x.2 argparse.py 使用

argparse 将从sys.argv中翟信息,或者让用户自己生成信息以供程序执行,合理运用argparse,能够让你的程序更容易配置和运行,一些常用的arguments如下:

请添加图片描述

argparse案例如下:

我们使用argparse.ArgumentParse()生成parser;用parser.add_argument('-key', default='value', type=str, required=False)添加参数,在parser中以键值对方式存储信息;用args=parser.parse_args()生成参数并将args返回。

在别的函数中调用则以args.data_path进行调用。

def parse_args():
    import argparse
    parser = argparse.ArgumentParser(description="pytorch unet training")

    parser.add_argument("--data-path", default="./", help="DRIVE root")
    # exclude background
    parser.add_argument("--num_classes", default=1, type=int)
    parser.add_argument("--device", default="cuda", help="training device")
    parser.add_argument("-b", "--batch-size", default=4, type=int)
    parser.add_argument("--epochs", default=200, type=int, metavar="N",
                        help="number of total epochs to train")

    parser.add_argument('--lr', default=0.01, type=float, help='initial learning rate')
    parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
                        help='momentum')
    parser.add_argument('--wd', '--weight-decay', default=1e-4, type=float,
                        metavar='W', help='weight decay (default: 1e-4)',
                        dest='weight_decay')
    parser.add_argument('--print-freq', default=1, type=int, help='print frequency')
    parser.add_argument('--resume', default='', help='resume from checkpoint')
    parser.add_argument('--start-epoch', default=0, type=int, metavar='N',
                        help='start epoch')
    parser.add_argument('--save-best', default=True, type=bool, help='only save best dice weights')
    # Mixed precision training parameters
    parser.add_argument("--amp", default=False, type=bool,
                        help="Use torch.cuda.amp for mixed precision training")

    args = parser.parse_args()

    return args


if __name__ == '__main__':
    args = parse_args()
	args.data_path

上面的代码和在shell中直接键入如下命令是一样的:

python parse_args.py --data-path=./ --num_classes=1
# or the following is okay
python parse_args.py --data-path ./ --num_classes 1

后面的部分内容省略了,但是效果是一样的。

你需要注意的是如果你写的是--data-path, --num_classes则你在命令行传参就得是--data-path, --num_classes,得一模一样,虽然在代码中访问args中参数的时候就得用args.data_path。所以我们建议参数全部以类似--data_path的方式命名

需要注意,你的argparse.ArgumentParser(description="pytorch unet training")函数不论是封装在if __name__=="__main__"中还是一个函数parse_args()中,都是可以通过在.py文件后面的terminal中的键入参数的操作来读入参数的,如python parse_args.py --data-path=./ --num_classes=1

需要注意,使用该方法从命令行增加的参数需要在.py文件后添加,在前面添加是读取不到的。即不能python --data-path=./ parse_args.py

x.3 os.environ

系统环境变量存储在os.environ中,以dict的键值对的方式实现存储,可以通过访问os.environ这个字典的键值对来访问系统环境变量。

x.4 杂鱼碎碎念

x.4.1 非

python的非结构通过not关键字实现,即c中!=通过not实现。

    if not os.path.exists("/home/yingmuzhi/_weight"):
        os.mkdir("/home/yingmuzhi/_weight")

x.4.2 os.cpu_count()

os.cpu_count()返回CPU线程数,即number of workers。

# linux下查看cpu核心数
1.查看CPU个数

cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l

2.查看每个物理CPU含有的核心个数

cat /proc/cpuinfo |grep "cpu cores"|uniq|wc -l

3.查看每个CPU核心含有的线程数

cat /proc/cpuinfo |grep "processor"|wc -l

x.4.3 python 中的?问号运算符

python 中的问号运算符如下:

batch_size = batch_size if batch_size > 1 else 0

# 也可以直接这么玩,在list当中取最小
minimum = min([2, 3, batch_size if batch_size > 1 else 0, 4])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sys.argv和argparse和os.environ/python命令行中键入参数的三种方式 的相关文章

  • Django:如何测试“HttpResponsePermanentRedirect”

    我正在为我的 django 应用程序编写一些测试 在我看来 它使用 HttpResponseRedirect 重定向到其他一些网址 那么我该如何测试呢 姜戈TestCase类有一个方法assertRedirects https docs d
  • 为什么 .setGeometry() 不改变 QWidget 实例的大小?

    我想使用 QWidget 更改 QPushButton 的大小 setGeometry https doc qt io qtforpython 5 PySide2 QtWidgets QWidget html PySide2 QtWidge
  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • 在 Numpy 中切片后确定结果数组的形状

    我很难理解在 numpy 中切片后如何确定结果数组的形状 例如 我使用以下简单代码 import numpy as np array np arange 27 reshape 3 3 3 slice1 array 1 2 1 slice2
  • 即使使用 .loc[row_indexer,col_indexer] = value 时也会设置 WithCopyWarning

    这是我的代码中得到的行之一SettingWithCopyWarning value1 Total Population value1 Total Population replace to replace value 4 然后我将其更改为
  • 如何从 PyCharm 项目中获取我的“exe”[重复]

    这个问题在这里已经有答案了 通过 PyCharm 在 Python 上编写一些项目 我想从中获取一个exe文件 我尝试过 另存为 gt XXX exe 但是 当我尝试执行它时出现错误 此类操作系统不支持该文件 附注 我有win7 x64 它
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • Python:计算数据帧列中所有行中特定字符的实例数

    我有一个包含列 toaddress ccaddress body 的数据框 df 我想迭代数据帧的索引 以获取 toaddress 和 ccaddress 字段中电子邮件地址的最小 最大和平均数量 这是通过计算这两列中每个字段中的 和 的实
  • 为什么我用 beautifulSoup 刮的时候有桌子,但没有 pandas

    尝试抓取条目页面转换为制表符分隔格式 主要拉出序列和 UniProt 登录号 当我跑步时 url www signalpeptide de index php sess m listspdb bacteria s details id 10
  • 将 Pandas 列中的列表拆分为单独的列

    这是我在 pandas 数据框中的 特征 列 Feature Cricket 82379 Kabaddi 255 Reality 4751 Cricket 15640 Wildlife 730 LiveTV 13 Football 4129
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如

随机推荐

  • 计算机提示vcruntime140.dll丢失是什么意思?vcruntime140.dll丢失的解决方法(详细方法)

    计算机丢失vcruntime140 dll是什么意思 经常看到有小伙伴有在网上问这样的问题 电脑上这个vcruntime140 dll文件丢失的问题经常发生吧 那么就很有必要给大家详细的说说这一方面的问题了 下面我们来看看 第一 vcrun
  • 工具推荐

    关注它 不迷路 本文章中所有内容仅供学习交流 不可用于任何商业用途和非法用途 否则后果自负 如有侵权 请联系作者立即删除 1 在线地址 http 107 151 202 163 8129 2 工具介绍 由于还没想好网站名字 目前仅以ip形式
  • 理解ROS节点和在中.launch文件启动节点

    理解ROS节点 1 图概念概述 Nodes 节点 一个节点即为一个可执行文件 它可以通过ROS与其它节点进行通信 Messages 消息 消息是一种ROS数据类型 用于订阅或发布到一个话题 Topics 话题 节点可以发布消息到话题 也可以
  • 微信小程序云开发入门

    参考链接 1条消息 微信小程序云开发入门详细教程 Yunlord的博客 CSDN博客 微信小程序云开发 1 新建小程序项目 选择使用云开发 进入小程序后点击云开发创建云环境 选择免费版的环境如果提示余额不足欠费进入腾讯云 如果是小程序进入选
  • 【数据库CS751】Union的用法以及含义

    目录 一 Union的含义 二 Union的用法 1 列数一样 这个很重要 2 union与union all 3 union可以排序么 4 别名会影响union么 那么别名会不会影响排序 那么之前说过了各种连接 其实union本质上还是和
  • Backup database plus archivelog delete input;

    Backup database plus archivelog 会备份归档日志Backup database plus archivelog delete input 会备份归档日志并且会在备份结束后删除默认目录下的归档日志 datafil
  • PAT C入门题目-7-17 成绩转换 (15 分)(switch-case)

    7 17 成绩转换 15 分 本题要求编写程序将一个百分制成绩转换为五分制成绩 转换规则 大于等于90分为A 小于90且大于等于80为B 小于80且大于等于70为C 小于70且大于等于60为D 小于60为E 输入格式 输入在一行中给出一个整
  • Python 学习4.1字典

    一 字典内包含的内容是一系列键和它们对应的值 字典放在花括号 中 键和值之间用冒号 分隔 键值对之间用 分隔 想储存多少键值对都可以 eg 输入 a zwj 250 zzy 251 250 zwj print a zwj print a 2
  • 神经网络容易受到对抗攻击,网络攻防原理与技术

    1 信息化战争的作战原则是什么 三项基本原则 一是隐蔽 二是快速 三是高效 隐蔽 就是通过隐身 欺骗等手段 确保 先敌发现 先敌攻击 快速 就是依托情报监视与侦察和快速打击系统 确保 发现即摧毁 高效 就是联合 集中使用高能精确弹药 确保战
  • 2023年大数据面试通关文牒系列篇

    大数据面试通关文牒系列篇 第二篇 Hadoop生态链 Round 1 HIVE HIVE 基础篇 1 Hive内部表和外部表的区别 未被external修饰的是内部表 被external修饰的为外部表 区别 内部表数据由Hive自身管理 外
  • python识别_Python手势识别与控制

    Python手势识别与控制 概述 本文中的手势识别与控制功能主要采用 OpenCV 库实现 OpenCV是一个基于BSD许可 开源 发行的跨平台计算机视觉库 可以运行在Linux Windows Android和Mac OS操作系统上 它轻
  • Linux - Centos7 搭建 JAVA 环境,安装 MAVEN

    一 下载 MAVEN 1 到官方网址下载 http maven apache org download cgi 2 下载好后 使用 FTP 类软件 将下载好的本地文件上传到 Linux 服务器上来 我使用的是 PSFTP 如果想试试这个软件
  • go语言实战-----25-----HTTP编程get/post/head、表单处理、panic处理

    一 HTTP编程get post head 1 HTTP编程 1 Go原生支持http import net http 即可 2 Go的http服务性能和nginx比较接近 3 几行代码就可以实现一个web服务 1 1 HTTP常见请求方法
  • vue插件开发以及发布

    vue插件开发
  • 关于串口通信思考

    如何给串口通信口增加LED灯作为通信指示灯 以下给出2种电路设计参考 第一种 第二种 思考 以上哪种电路更优 为什么 第一种电路 LED灯使用共阴极连接 这种方法有什么好处呢 就是在TX在高电平情况下会点亮二极管 低电平情况下不会 这个问题
  • 刷脸支付成为全球科技巨头们主攻研发方向

    相对于已经熟悉的二维码支付 一些民众对于刷脸支付是否安全表示担忧 蚂蚁金服资深算法专家李亮表示 通过软硬件的结合 智能算法与风控体系综合保证准确性和安全性 目前识别的准确率为99 99 而扫码极易植入木马和钓鱼软件 反而存在更大的安全隐患
  • [人工智能-深度学习-78]:开发环境 - pip install cv2下载失败的解决办法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122320433 目录 1 出错现象
  • TypeScript 枚举使用整理

    一 定义 enum 使用枚举我们可以定义一些有名字的数字常量 枚举通过enum关键字定义 枚举的定义和C 中有些类似 enum Direction Up 1 Down Left Right console info Direction co
  • java.lang.StackOverflowError出现的原因

    严重 Exception initializing page context java lang StackOverflowError at javax servlet http HttpServletRequestWrapper getS
  • sys.argv和argparse和os.environ/python命令行中键入参数的三种方式

    参考 命令行运行Python脚本时传入参数 3种方法 https blog csdn net helloasimo article details 124210144 x 1 sys argv sys argv类似于c中main函数中的ar