一. sys模块的使用
sys模块是Python语言的一个系统内置模块,安装Python后自动包含sys库,不需要单独安装。只需import sys即可。
我们可以通过 dir(sys) 命令查看模块中可用的方法,示例如下:
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegacywindowsfsencoding', '_getframe', '_git', '_home', '_xoptions', 'api_version', '
argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_wrapp
er', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizin
g', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'versio
n', 'version_info', 'warnoptions', 'winver']
下面主要介绍一下sys模块的常用方法:
1. sys.argv——实现从程序外部向程序传递参数
sys.argv 变量是一个包含了命令行参数的字符串列表,利用命令行向程序传递参数。其中,脚本的名称总是 sys.argv 列表的第一个参数。
import sys
print(sys.argv[0]) #sys.argv[0]表示代码本身的文件路径
print("命令行参数如下:")
for i in sys.argv:
print(i)
命令行输入参数如下:
D:\st13\python\1.20\python lx.py Welcome to Xian
运行结果:
lx.py #sys.argv[0]
命令行参数如下:
lx.py
Welcome
to
Xian
2. sys.path
获取指定模块搜索路径的目录名列表,列表中的第一项为当前的工作目录。
即,import模块的目录名位置列表,列表中的第一项为当前位置。
>>>import sys
>>> print(sys.path)
['', 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\DLLs', 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib', 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages']
3. sys.exit([arg])
程序中间的退出,arg=0为正常退出。在一般情况下,执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数(0是正常退出,其他为异常)
在如下例子中,首先打印hello,在执行sys.exit(1)时,将1作为参数传递到函数中,然后将1打印出来,程序正常退出,不会执行后面的语句,也就不会打印出world。
在这里插入代码片
4. sys.version——获取Python版本信息
>>> import sys
>>> sys.version
'3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]'
5. sys.platform——获取当前系统平台,返回操作系统的名称
>>> import sys
>>> sys.platform
'win32'
6. sys.getsizeof——获取所查询内容的空间大小。
有下面例子可以推出:对于同一元素,内存空间大小排序为:数字 = 元组 < 字符串 < 列表 < 集合。
>>> import sys
>>> number1=5
>>> str1='5'
>>> tup1=(5)
>>> list1=[5]
>>> set1={5}
>>> sys.getsizeof(number1)
28
>>> sys.getsizeof(str1)
50
>>> sys.getsizeof(tup1)
28
>>> sys.getsizeof(list1)
72
>>> sys.getsizeof(set1)
224
7. sys.modules——返回系统导入的模块字段
sys.modules 是一个全局字典,该字典是 Python 启动后就加载在内存中。每当程序员导入新的模块,sys.modules 将自动记录该模块。当第二次再导入该模块时,Python 会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法。
>>> import sys
>>> sys.modules['os']
<module 'os' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\os.py'>
8. sys.modules.keys()——返回所有已经导入的模块
>>> import sys
>>> sys.modules.keys()
dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'nt', 'winreg', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'ntpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', 'atexit'])
9. sys.modules.values()——返回所有的模块,包括模块的路径
>>> import sys
>>> sys.modules.values()
dict_values([<module 'sys' (built-in)>, <module 'builtins' (built-in)>, <module '_frozen_importlib' (frozen)>, <module '_imp' (built-in)>, <module '_thread' (built-in)>, <module '_warnings' (built-in)>, <module '_weakref' (built-in)>, <module 'zipimport' (built-in)>, <module '_frozen_importlib_external' (frozen)>, <module 'io' (built-in)>, <module 'marshal' (built-in)>, <module 'nt' (built-in)>, <module 'winreg' (built-in)>, <module 'encodings' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\encodings\\__init__.py'>, <module 'codecs' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\codecs.py'>, <module '_codecs' (built-in)>, <module 'encodings.aliases' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\encodings\\aliases.py'>, <module 'encodings.utf_8' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\encodings\\utf_8.py'>, <module '_signal' (built-in)>, <module '__main__' (built-in)>, <module 'encodings.latin_1' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\encodings\\latin_1.py'>, <module 'io' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\io.py'>, <module 'abc' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\abc.py'>, <module '_abc' (built-in)>, <module 'site' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site.py'>, <module 'os' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\os.py'>, <module 'stat' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\stat.py'>, <module '_stat' (built-in)>, <module 'ntpath' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ntpath.py'>, <module 'genericpath' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\genericpath.py'>, <module 'ntpath' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ntpath.py'>, <module '_collections_abc' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_collections_abc.py'>, <module '_sitebuiltins' from 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_sitebuiltins.py'>, <module 'atexit' (built-in)>])
10. sys.stdout / sys.stdin / sys.stderr
sys.stdout 标准输出;sys.stdin 标准输入;sys.stderr 错误输出
>>> import sys
>>> sys.stdout
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
>>> sys.stdin
<_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>
>>> sys.stderr
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>
11. sys.getdefaultencoding() / sys.getfilesmencoding()
- sys.getdefaultencoding():获取解释器默认编码;
- sys.getfilesystemencoding():获取内存数据存到文件里的默认编码。
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>> sys.getfilesystemencoding()
'utf-8'
二. sys模块的应用
1,根据如上信息,我们可以对指定的模块进行判断,判断是否为内建模块。
import sys
print("Name is:",sys.argv[0])
def dump(module):
print(module+'---->',end='')
if module in sys.builtin_module_names:
print("内建模块")
else:
module=__import__(module)
print(module.__file__)
dump("sys")
dump("json")
dump("shelve")
dump("os")
dump("string")
dump("requests")
结果如下:
Name is: D:\st13\test\1.py
sys---->内建模块
json---->C:\Python36\lib\json\__init__.py
shelve---->C:\Python36\lib\shelve.py
os---->C:\Python36\lib\os.py
string---->C:\Python36\lib\string.py
requests---->C:\Python36\lib\site-packages\requests\__init__.py
2,在如下示例中,主要应用了sys模块中的argv实现了从程序外部向程序内传递参数,借助具体的案例让大家可以对sys模块,能够有更加深入的了解。
import os
#import sys 这种方法导入sys模块,需使用sys.argv
from sys import argv #这种方法导入sys模块,可直接使用argv
def ping(net,start=1,end=85,n=1,w=3):
for i in range(start,end+1):
ip=net+"."+str(i)
command="ping %s -n %d -w %d"%(ip,n,w)
print(ip,("通","不通")[os.system(command)]) #os.system(command):运行command命令
if len(argv) not in [2,4,6]:
print("参数输入错误!")
print("运行示例:")
print("note1.py 121.194.14")
print("note1.py 121.194.14 80 90")
print("note1.py 121.194.14 80 90 3 1")
print("语法:note1.py net startip endip count timeout")
elif len(argv)==2:
net=argv[1]
ping(net)
elif len(argv)==4:
net=argv[1]
ping(net,start=int(argv[2]),end=int(argv[3]))
else:
net=argv[1]
ping(net,start=int(argv[2]),end=int(argv[3]),n=int(argv[4]),