python中的sys模块和sys.argv的使用
一、sys模块
sys是Python的一个「标准库」,也就是官方出的「模块」,是「System」的简写,封装了一些系统的信息和接口。
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.modules.keys() 返回所有已经导入的模块列表
sys.exc_info() 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息
sys.exit(n) 退出程序,正常退出时exit(0)
sys.hexversion 获取Python解释程序的版本值,16进制格式如:0x020403F0
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.maxunicode 最大的Unicode值
sys.modules 返回系统导入的模块字段,key是模块名,value是模块
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout 标准输出
sys.stdin 标准输入
sys.stderr 错误输出
sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息
sys.exec_prefix 返回平台独立的python文件安装的位置
sys.byteorder 本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little'
sys.copyright 记录python版权相关的东西
sys.api_version 解释器的C的API版本
sys.version_info
>>> sys.version_info
(2, 4, 3, 'final', 0) 'final'表示最终,也有'candidate'表示候选,表示版本级别,是否有后继的发行
sys.displayhook(value) 如果value非空,这个函数会把他输出到sys.stdout,并且将他保存进__builtin__._.指在python的交互式解释器里,'_'代表上次你输入得到的结果,hook是钩子的意思,将上次的结果钩过来
sys.getdefaultencoding() 返回当前你所用的默认的字符编码格式
sys.getfilesystemencoding() 返回将Unicode文件名转换成系统文件名的编码的名字
sys.setdefaultencoding(name)用来设置当前默认的字符编码,如果name和任何一个可用的编码都不匹配,抛出LookupError,这个函数只会被site模块的sitecustomize使用,一旦别site模块使用了,他会从sys模块移除
sys.builtin_module_names Python解释器导入的模块列表
sys.executable Python解释程序路径
sys.getwindowsversion() 获取Windows的版本
sys.stdin.readline() 从标准输入读一行,sys.stdout.write("a") 屏幕输出a
二、sys.argv的使用
「argv」是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序。
sys.argv[]说是一个从程序外部获取参数的桥梁。我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。
下面总结一下:
sys.argv[0]表示代码本身文件路径,所以参数从1开始。
sys.argv[1]表示第一个命令行参数
sys.argv[1:]表示从第一个命令行参数到输入的最后一个命令行参数
sys.argv[1][2:] 表示取第一个命令行参数,但是去掉前两个字节
应用例子:
import sys print(sys.argv) #获取运行python文件的时候传入的参数,第1个参数,index是0 #输出:[E:/MyScripts/Study/day10/sys-argv.py] if len(sys.argv)>1: #如果参数大于1,证明给了参数 if sys.argv[1]=='--help': #如果第2个参数是--help quit('这个python是用来测试的,运行的时候需要使用 python a.py port') #quit表示运行完此句代码即退出,不继续运行下面的代码了 else: #否则传入的是port并赋值给port port = sys.argv[1] else: #如果没有传入参数,则port默认是7878 port = 7878 import flask server = flask.Flask(__name__) @server.route('/') def index(): return '<h1>首页</h1>' server.run(port=port)
以上代码输出:
#以上代码输出结果是: ['E:/MyScripts/Study/day10/sys-argv.py'] #下面是启动端口号为7878的一个本地服务 * Serving Flask app "sys模块" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:7878/ (Press CTRL+C to quit)
也可以在pycharm的terminal中运行,如下:
#在Terminal中写命令,先写了一个python sys模块.py --help,回车运行完成后,写了python sys模块.py 2345(传了port)
E:\MyScripts\Study\day10>python sys-argv.py --help ['sys-argv.py', '--help'] 这个python是用来测试的,运行的时候需要使用 python a.py port E:\MyScripts\Study\day10>python sys-argv.py 2345 ['sys-argv.py', '2345'] * Serving Flask app "sys-argv" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:2345/ (Press CTRL+C to quit)
或者在pycharm中选择填写参数
sys.argv使用场景,如别人调用你的代码时,需要别人传参数(如端口号可以传使用人自己的端口号,这样网址的端口号就是他自己的端口号了),根据传的参数(如help)去执行对应的命令
作用:是获取到运行python文件的时候传入的参数