argparse模块和sys.argv和查看python解释器路径
文章目录
1.argparse模块
argparse 是一个用来解析命令行参数的 Python 库,它是 Python 标准库的一部分。argparse 模块使编写用户友好的命令行界面变得容易。程序定义了所需的参数,而 argparse 将找出如何从 sys.argv 中解析这些参数。argparse 模块还会自动生成帮助和使用消息,并在用户为程序提供无效参数时发出错误。
1.1简单实现圆柱体体积的计算
为了便于对argparse命令行参数解析模块的理解,我们先从一个简单的程序入手:
import math
def cylinder_volume(radius, height):
vol = (math.pi) * (radius ** 2) * height
return vol
if __name__ == '__main__':
print(cylinder_volume(2, 4))
通过PyCharm执行代码,其显示的结果:
通过命令行的方式执行代码,其显示的结果:
可以看到如果使用命令行方式,需要先进入将要执行的xxx.py文件所在的文件目录下,并输入python xxx.py即可。
1.2使用argparse模块实现圆柱体体积的计算
- 导入argparse模块
import argparse
- 创建一个解析对象parser
parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
其中,parser解析对象相当于一个用来装载参数的容器,而description用来描述解析对象。
3. 添加命令行参数
parser.add_argument('radius', type=int, help='Radius of Cylinder')
parser.add_argument('height', type=int, help='Height of Cylinder')
args = parser.parse_args()
在计算圆柱体体积的例子中,需要的参数由两个分别是radius和height,所以需要向解析对象中添加这两个参数,参数的类型定义为int类型,其中help用来对参数进行描述说明。
4. 将原函数实参换成命令行参数
print(cylinder_volume(args.radius, args.height))
- 完整代码复现
import math
import argparse
parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
parser.add_argument('radius', type=int, help='Radius of Cylinder')
parser.add_argument('height', type=int, help='Height of Cylinder')
args = parser.parse_args()
def cylinder_volume(radius, height):
vol = (math.pi) * (radius ** 2) * height
return vol
if __name__ == '__main__':
print(cylinder_volume(args.radius, args.height))
- 执行代码
1.2.1基本代码
在PyCharm中直接执行代码,其结果显示:
PyCharm会直接报错,因为这段代码需要传入参数。
现在通过命令行的方式执行代码,其结果显示:
可以看见结果与之前的是一样的。
接着,我们可以调用–help或-h参数来查看程序的描述:
现在,我们尝试将先前传入的参数顺序进行改变,得到的结果如下:
1.2.2选择参数
可以看见结果就完全不一样了,从help中的提示信息知道,传入的参数需要按照严格的顺序进行,然而,在日常中,可能涉及到的参数数目较多,对于参数的顺序不是那么好记忆,这时我们可以对原先的代码进行修改,使其能使用选择性参数来进行:
parser.add_argument('-r', '--radius', type=int, help='Radius of Cylinder')
parser.add_argument('-H', '--height', type=int, help='Height of Cylinder')
这里需要注意,由于 ‘-h’ 参数已经被help命令占用,所以对于height,我们使用 ’-H‘ 。
下面是再次执行代码的显示结果:
现在,我们通过 ’-h‘ 来查看程序的描述:
如果想让上面的描述看起来比较简洁,可以将代码进行修改:
parser.add_argument('-r', '--radius', type=int, metavar='', help='Radius of Cylinder')
parser.add_argument('-H', '--height', type=int, metavar='', help='Height of Cylinder')
现在,我们再次通过 ’-h‘ 来查看效果:
1.2.3设置必填 required=True
那现在如果只输入一个参数,结果会怎样呢?
可以看到报错信息中,那个没有具体指定数值的参数会被赋予None值,为了避免这种情况,我们可以对代码进行如下修改:
parser.add_argument('-r',
'--radius',
type=int,
metavar='',
required=True,
help='Radius of Cylinder')
parser.add_argument('-H',
'--height',
type=int,
metavar='',
required=True,
help='Height of Cylinder')
现在再来执行一次:
可以看到此时会提示需要添加的参数。
1.2.4互斥参数的介绍
现在我们尝试添加互斥组:
group = parser.add_mutually_exclusive_group()
group.add_argument('-q', '--quiet', action='store_true', help='print quiet')
group.add_argument('-v', '--verbose', action='store_true', help='print verbose')
首先建立一个group容器,接着向其中添加参数,action参数赋值为store_true意味着当在命令中添加’-q‘或者’–quiet‘(’-v‘或者’–verbose‘)时,程序将对args.quiet赋值为true,而默认情况下为false。接着利用这一原理,我们就可以对main函数的内容进行修改:
volume = cylinder_volume(args.radius, args.height)
if args.quiet:
print("quiet: %s" % volume)
elif args.verbose:
print("verbose: %s" % volume)
else:
print("Volume of a Cylinder with radius %s and height %s is %s" % (args.radius, args.height, volume))
现在进行命令行测试,查看效果:
需要注意的是,互斥的含义是指不能同时参入互斥组中的参数,即只有一个参数能成立,如果强行传入互斥组中两个以上的参数,则会出现如下错误提示:
import math
import argparse
parser = argparse.ArgumentParser(description='Calculate volume of a Cylinder')
parser.add_argument('-r',
'--radius',
type=int,
metavar='',
required=True,
help='Radius of Cylinder')
parser.add_argument('-H',
'--height',
type=int,
metavar='',
required=True,
help='Height of Cylinder')
group = parser.add_mutually_exclusive_group()
group.add_argument('-q', '--quiet', action='store_true', help='print quiet')
group.add_argument('-v',
'--verbose',
action='store_true',
help='print verbose')
args = parser.parse_args()
def cylinder_volume(radius, height):
vol = (math.pi) * (radius**2) * height
return vol
if __name__ == '__main__':
volume = cylinder_volume(args.radius, args.height)
if args.quiet:
print("quiet: %s" % volume)
elif args.verbose:
print("verbose: %s" % volume)
else:
print("Volume of a Cylinder with radius %s and height %s is %s" %
(args.radius, args.height, volume))
2.sys.argv
等同于shell里面的默认变量
#! /bin/bash
echo "文件名:"$0
echo "第一个参数:"$1
echo "第二个参数:"$2
echo "第三个参数:"$3
echo "第四个参数:"$4
import sys
print(sys.argv[0], sys.argv[1])
# 无参数的话会报列表越界 IndexError: list index out of range
import sys
command = sys.argv[1]
if command == 'modules':
modules = sys.modules
print(modules)
'''
'winreg' (built-in)>, 'time': <module 'time' (built-in)>,
'zipimport': <module 'zipimport' (frozen)>,
'_codecs': <module '_codecs' (built-in)>, 'codecs': <module
'codecs' from 'F:\\python3.8\\lib\\codecs.py'>,
'''
elif command == 'path':
path = sys.path # sys.path特指模块的查询路径的列表,初始化是从环境变量PYTHONPATH。
print(path)
'''
['D:\\web前端应用课', 'F:\\python3.8\\python38.zip', 'F:\\python3.8\\DLLs',
'F:\\python3.8\\lib', 'F:\\python3.8', 'F:\\python3.8\\lib\\site-packages',
'F:\\python3.8\\lib\\site-packages\\tkbc-0.0.0-py3.8.egg']
'''
elif command == 'encoding':
code = sys.getdefaultencoding()
print(code)
'''
utf-8
'''
elif command == 'platform':
print(sys.platform)
'''
win32
'''
elif command == 'version':
print(sys.version)
'''
3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]
'''
else:
print('该命令未识别')
3.查看 Python解释器路径的两种方式
3.1通过脚本查看
import sys
import os
print('当前 Python 解释器路径:')
print(sys.executable)
r"""
当前 Python 解释器路径:
C:\Users\jpch89\AppData\Local\Programs\Python\Python36\python.EXE
"""
print()
print('当前 Python 解释器目录:')
print(os.path.dirname(sys.executable))
r"""
当前 Python 解释器目录:
C:\Users\jpch89\AppData\Local\Programs\Python\Python36
"""
3.2直接在控制台查看
Windows 版:使用 where python
C:\Users\jpch89>where python
C:\Users\jpch89\AppData\Local\Programs\Python\Python37\python.exe
C:\Users\jpch89\AppData\Local\Programs\Python\Python36\python.exe
相关文章
- python的XML模块
- 第四百零四节,python网站第三方登录,social-auth-app-django模块,
- 使用Python自带模块发送邮件
- python:利用logbook模块管理日志
- python实现语音录入识别
- 在Python中使用glob模块查找文件路径的方法
- python paramiko模块学习分享
- Python 在问答频道中刷题积累到的小技巧(七)
- Python每日一练(20230225)
- Python语言学习:Python语言学习之python包/库package的简介(模块的封装/模块路径搜索/模块导入方法/自定义导入模块实现华氏-摄氏温度转换案例应用)、使用方法、管理工具之详细攻略
- Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件
- Python编程语言学习:包导入和模块搜索路径(包路径)简介、使用方法(python系统环境路径的查询与添加)之详细攻略
- python使用requests模块模拟登陆知乎
- Python编程:查看python环境支持的whl
- Python编程:查看python语法中的关键字keyword
- Python中函数,类,模块,包,库的区别
- 60集Python入门视频PPT整理 | 模块
- 【回答问题】ChatGPT上线了!如何安装python-ipopt?python-ipopt有哪些用法?
- Python标准库:内置函数globals()
- python下的select模块使用 以及epoll与select、poll的区别
- python中logging模块的一些简单用法
- Python数模笔记-Sklearn(4)线性回归
- 【异常】前端ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- 【python问题解决】---- Requirement already satisfied 的解决办法