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文件的时候传入的参数

posted @ 2019-01-16 15:04  blueteer  阅读(1332)  评论(0编辑  收藏  举报